gpt4 book ai didi

Laravel 自定义列,嵌套关系

转载 作者:行者123 更新时间:2023-12-02 20:59:16 24 4
gpt4 key购买 nike

我有这个模型:

案例:

class Cases extends Model {
const UPDATED_AT = 'edit_date';
const CREATED_AT = 'crt_date';

protected $primaryKey = 'no';
protected $guarded = ['no'];
protected $table = 'assist';

public function providers() {
return $this->hasMany('App\CaseProviders', 'case_no');
}

public function claims() {
return $this->hasMany('App\Claim', 'reference_no');
}

}

案例提供者:

class CaseProviders extends Model {

public function detail() {
//return $this->hasOne('App\Providers', 'code', 'code')->select(['code', 'name']);
return $this->hasOne('App\Providers', 'code', 'code');
}

}

提供商:

class Providers extends Model {

protected $table = 'user_cards';

public function country() {
return $this->hasOne('App\Country','id','country');
}


}

国家/地区:

class Country extends Model {

protected $primaryKey = 'id';
protected $table = 'user_countries';

public function city() {
return $this->hasMany('App\City', 'country', 'id');
}

}

城市:

class City extends Model
{
protected $table = 'user_cities';
}

Controller 中的代码:

$case = \App\Cases::where('no', $id)->with('providers.detail.country.city')->first();

代码工作正常,但我不需要从每个模型中选择所有列。我只需要这个:

名称、代码 - 来自详细信息

姓名 - 来自国家

姓名 - 来自城市。

我该怎么做?

最佳答案

我还没有测试过这个,由于嵌套关系,它可能会进行更多查询,但无论如何,尝试一下也没什么坏处:

    $case = \App\Cases::where('no', $id)->with([
'providers.detail' => function ($query){
$query->select('name', 'code');
},
'providers.detail.country' => function ($query){
$query->select('name');
},
'providers.detail.country.city' => function ($query){
$query->select('name');
},
])->first();

编辑:

如果您只需要选择这些具有关系的字段,您可以直接在模型中选择它:

public function country() {
return $this->hasOne('App\Country','id','country')->select(['name']);
}

注意您必须包含 id 列和外部 id 列。

关于Laravel 自定义列,嵌套关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39159173/

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