我有以下方法:
public function getBookings (Request $request) {
$bookings = Bookings::where('client_department_id', '=', $request->segment(3))
->where('status', '=', $request->segment(5))
->with(['clientsDepartments' => function($query) {
$query->select(
'client_department_id',
'department_name'
)
->with(['bookingsClientsOptions' => function($query) {
$query->with(['bookingsClientsOptionsData' => function($query) {
$query->select(
'booking_attendee_id',
'value'
)
->orderBy('creation_date', 'desc');
}])
->orderBy('bookings_client_option_id', 'desc');
}])
->orderBy('department_name', 'desc');
}])
->orderBy('creation_date')
->take(10)
->get();
return BookingsResource::collection($bookings)->response();
}
在这里,bookingsClientsOptions
是 n 定义客户端选项的行数,而bookingsClientsOptionsData
是值本身。
但是,不需要用户为每个客户端选项输入值,结果是-例如-客户端选项1和2可以有值,而3没有,4和5有
我需要检索存在的值,并 null 或[]
(不存在)填充空白。
如果您查看图形,它会创建bookings_clients_options
数组,并在其中创建一个bookings_clients_options_data
数组以包含客户端选项,但尽管如此,也没有将行数据放入其中Eloquent生成的语句可以检索正确的行数据。
根据要求,“ app / BookingsClientsOptions.php”中的关系为:
public function clientsDepartments () {
return $this->belongsTo(
'App\ClientsDepartments',
'client_department_id'
);
}
public function bookingsClientsOptionsData () {
return $this->hasMany(
'App\BookingsClientsOptionsData',
'bookings_client_option_id'
)
->select([
'bookings_client_option_data_id',
'bookings_client_option_id',
'booking_attendee_id',
'value'
])
->orderBy('creation_date', 'desc');
}
...和“ app / BookingsClientsOptionsData.php”是:
public function bookingsClientsOptions () {
return $this->hasOne(
'App\BookingsClientsOptions',
'bookings_client_option_id'
);
}
public function attendees () {
return $this->belongsTo(
'App\BookingsAttendees',
'booking_attendee_id'
);
}
答案 0 :(得分:0)
渴望加载关系时,始终需要选择外键(在这里:bookings_client_option_id
)。 Laravel要求将结果与父母配对。
您的关系确实选择了此列,但是闭包覆盖了所选择的列。结果,查询仅选择booking_attendee_id
和value
,结果为空。
删除select()
子句:
$query->with('bookingsClientsOptionsData')