我在模型上有一个关系,我需要在我的控制器上延迟加载但是我需要使用原始模型中的属性来执行查询约束。 所以我有类似的东西:
$Users = User::all();
$Users->load(['disputes' => function($query){
$query->where('property', $this->property );
}]);
但它返回Undefined属性$ account_number_tu。 在执行load()时,如何确保$ this引用$ Users中的每个$ User? 我尝试在模型中执行此约束,但
$this->property;
返回null。
答案 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');
}]);