Laravel Lazy在Load()自定义约束中加载参考$ this->属性

时间:2016-11-08 20:33:40

标签: orm eloquent laravel-5.2 constraints

我在模型上有一个关系,我需要在我的控制器上延迟加载但是我需要使用原始模型中的属性来执行查询约束。 所以我有类似的东西:

$Users = User::all();
$Users->load(['disputes' => function($query){
 $query->where('property', $this->property );
}]);

但它返回Undefined属性$ account_number_tu。 在执行load()时,如何确保$ this引用$ Users中的每个$ User? 我尝试在模型中执行此约束,但

$this->property;

返回null。

1 个答案:

答案 0 :(得分:1)

在幕后,load()初始化Builder模型上User的实例,然后将传递给load的参数传递给with建设者的方法。有了这个,您可以使用load方法在with方法中执行所有操作。

要回答您的问题,您可以这样做:

$Users = User::all();
$Users->load(['disputes' => function($query) {
    return $query->select('disputes.*')
        ->leftJoin('disputes', 'disputes.user_id', '=', 'users.id')
        ->whereRaw('users.property = disputes.property');
}]);

与...相同:

$Users = User::with(['disputes' => function($query) {
    return $query->select('disputes.*')
        ->leftJoin('disputes', 'disputes.user_id', '=', 'users.id')
        ->whereRaw('users.property = disputes.property');
}]);