gpt4 book ai didi

laravel - 急切加载时仅选择相关模型中的某些列

转载 作者:行者123 更新时间:2023-12-02 17:00:18 27 4
gpt4 key购买 nike

我有两个相关模型:

class Attribute extends Eloquent
{
public function categories()
{
return $this->hasMany('Category');
}
}

class Category extends Eloquent
{
public function attributes()
{
return $this->belongsTo('Attribute');
}
}

我想将所有属性及其类别作为 JSON 对象返回,但我只想在两个模型中选择某些字段(即不返回 JSON 中的“created_at”等字段)。

我已经尝试过这个:

$attributes = Attribute::select('id', 'name')
->with(['categories' => function ($query) {
$query->select('categories.id', 'categories.name', 'categories.attribute_id');
}]);

Response::JSON($attributes->get());

但是尽管对相关模型进行了选择查询,但仍返回未请求的字段:

attributes: [{
id: 3,
name: "Organisation",
categories: [{
id: 3,
name: "Asia HQ",
attribute_id: 3,
created_at: "2013-11-30 00:00:00",
updated_at: "2013-11-30 00:00:00"
}]
}]

在预加载时如何仅选择相关模型中的某些列?

最佳答案

使用 laravel 的 select() 方法:

$attributes = Attribute::select('id', 'name')->with(['categories' =>function($query){
$query->select(['categories.id', 'categories.name','categories.attribute_id'])->get();
}]);

Response::JSON($attributes->get());

要使 select 方法在预加载中工作,您需要将foreign_key 包含在选定的列列表。

引用:http://laravel-tricks.com/tricks/column-selection-in-eager-loading

关于laravel - 急切加载时仅选择相关模型中的某些列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24801637/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com