shy*_*.me 2 php laravel eloquent
我有模型Project具有一定$appends有些关系像pages,brands,status等等。
而在$appends它pages,并在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)
| 归档时间: |
|
| 查看次数: |
3413 次 |
| 最近记录: |