我有2个型号,车辆和制造商。和制造商有一对多的关系。我已在两个模型上启用了软删除功能。我有一个所有车辆的html表,显示html表中的title,slug,manufacturer_id和deleted_at(laravel default)字段。
现在当我从页面上删除车辆时,一切正常,它显示所有车辆+软删除的车辆。同样,如果我删除该车辆的制造商,我仍然看到所有制造商+软删除制造商。现在当我回到车辆页面时出现问题,我收到错误说
Trying to get property of non-object
这意味着它正在寻找不再存在的manufacturer_id。这是我获得所有车辆的雄辩查询
// Vehicle Controller
/* This query basically gets all fields in the first column from vehicle model
and all the fields in the second column from manufacturer model*/
$this->vehicle->getAllWithTrash(
['id', 'title', 'description', 'is_active', 'manufacturer_id', 'created_at', 'updated_at', 'deleted_at'],
['title', 'id']
) );
// Eloquent Repository
public function getAllWithTrash( $columns1 = array('*'), $columns2 = array('*') ){
return Vehicle::withTrashed()->with(['manufacturer' => function($q) use ($columns2){
$q->select($columns2);
}])->get($columns1)->toJson();
}
所以我想要修改这个查询,所以它会向所有制造商提取所有车辆+软删除的车辆是否被软删除。
答案 0 :(得分:4)
请参阅withTrashed()功能
如上所述,将自动排除软删除的模型 来自查询结果。但是,您可以强制使用软删除的模型 在查询中使用withTrashed方法显示在结果集中:
$flights = App\Flight::withTrashed()->where('account_id', 1)->get();
withTrashed方法也可用于关系查询:
$flight->history()->withTrashed()->get();
试试这个:
// Eloquent Repository
public function getAllWithTrash( $columns1 = array('*'), $columns2 = array('*') ){
return Vehicle::withTrashed()->with(['manufacturer' => function($q) use ($columns2){
$q->withTrashed()->select($columns2);
}])->get($columns1)->toJson();
}