[英]Get data without appends and relations in Laravel from Eloquent
我有模型Project
,它有一些$appends
和一些关系,如pages
、 brands
、 status
等。
在$appends
它有pages
,在Page
模型中它有很多其他$appends
。 现在,当我执行Project::find($id)
它会检索项目、属于 Page 的页面和其他模型。 我没有带做with
,所以对于每一页触发大量的查询。
不使用
DB::table('projects')->where('id', $id)->get();
有没有更好的方法只加载 Project 模型,没有关系,没有附加,没有通过 Eloquent 加载?
不幸的是,这不是它的工作原理。 如果要删除附加内容,可以按如下方式操作:
$project = Project::find(1);
$project->setAppends([]);
return $project; //no values will be appended
但是,如果这些附加正在执行数据库调用并且您不想这样做,则应该重新检查附加在那里是否有意义。 这实际上取决于您是否认为始终包含appends
有意义。
这对我很有用:
$services = Service::all()->makeHidden(['appendField1', 'appendField2'])->toArray();
我试图访问的第二个模型的附加字段有问题,它进入了一个无限循环。 所以在用户模型中;
代替
return $this->organisation->is_enabled;
使用:
return $this->organisation->setAppends([])->is_enabled;
为我解决了问题,因为 setAppends([]) 函数取消了不必要的关系
你可以试试这个
User::where('user_id',$user_id)->get()->makeHidden(['full_name','start_end_date']);
// YourModel.php
public static $withoutAppends = false;
public function scopeWithoutAppends($query)
{
self::$withoutAppends = true;
return $query;
}
protected function getArrayableAppends()
{
if (self::$withoutAppends){
return [];
}
return parent::getArrayableAppends();
}
$result = YourModel::withoutAppends()->all();
我不知道它是否适用于包含多条记录的集合。 但是如果你需要它用于没有关系的单个模型,你可以
$project->attributesToArray();
https://laravel.com/docs/8.x/eloquent-serialization#serializing-to-arrays
您可以使用自定义查询来获得如下结果:
DB::table('users as u')->join('state_history as sh', 'sh.user_id', '=', 'u.id')->where('u.id','=', $id)->join('users as u1','sh.team_id','=','u1.id')->select('u.name','sh.state','sh.created_at','u1.name as tname')->orderBy('sh.created_at', 'desc')->get();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.