我有一些表,其中一个是名为Users
的表,其中有软删除的行。
我的代码如下:
$appointments = Appointment::with('user')->get();
$return = array();
foreach ($appointments as $key => $appointment) {
$return[] = array(
$appointment->customer_name,
$appointment->date->format('d/m/Y'),
$appointment->time,
$appointment->status,
$appointment->user->full_name,
);
}
由于删除了包含用户的行,因此我在以下行中收到错误:
$appointment->user->full_name
因为当然没有匹配此用户。
我尝试在with('user')
之前和之后添加withTrashed()到第一行,但这没有帮助。
如何确保此查询确实返回所有用户的所有约会,甚至是已删除的约会?
答案 0 :(得分:65)
我并非100%确定这是有效的,因为此方法用于为急切加载添加约束,但您可能想尝试一下:
$appointments = Appointment::with(array('user' => function($query) {
$query->withTrashed();
}))->get();
这应该将withTrashed()应用于抓取用户的查询,而不是抓取约会的查询。
哦,只是为了澄清,您可以在两个查询中添加withTrashed():
$appointments = Appointment::with(array('user' => function($query) {
$query->withTrashed();
}))->withTrashed()->get();
编辑:想到一个更简单的方法:
将withTrashed()添加到user()关系中(如果您希望在每次调用此关系时都应用此选项,请执行此操作):
public function user() {
return $this->hasOne('User')->withTrashed();
}