繁体   English   中英

从 Eloquent 获取 Laravel 中没有附加和关系的数据

[英]Get data without appends and relations in Laravel from Eloquent

我有模型Project ,它有一些$appends和一些关系,如pagesbrandsstatus等。

$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM