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

shy*_*.me 2 php laravel eloquent

我有模型Project具有一定$appends有些关系像pagesbrandsstatus等等。

而在$appendspages,并在Page模型它有很多其他的$appends。现在,当我Project::find($id)检索项目时,它是属于Page的页面和其他模型。而且我还没有完成with,所以对于每个页面,它都会引发很多查询。

不使用

DB::table('projects')->where('id', $id)->get();
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来仅加载Project模型,没有关系,没有附加内容,通过Eloquent加载任何内容?

小智 14

// 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();
}
Run Code Online (Sandbox Code Playgroud)
$result = YourModel::withoutAppends()->all();
Run Code Online (Sandbox Code Playgroud)


Ale*_*ris 10

不幸的是,这不是它的工作原理。如果要删除附加内容,可以按如下方式操作:

$project = Project::find(1);
$project->setAppends([]);

return $project; //no values will be appended
Run Code Online (Sandbox Code Playgroud)

但是,如果这些附加正在执行数据库调用并且您不想这样做,则应该重新检查附加在那里是否有意义。这是真正的你是否觉得很有道理的事情appends总是被包含与否。


小智 5

对我有用:

$services = Service::all()->makeHidden(['appendField1', 'appendField2'])->toArray();
Run Code Online (Sandbox Code Playgroud)