【问题标题】:Model return empty array when use select in model (Laravel)在模型中使用选择时模型返回空数组(Laravel)
【发布时间】:2019-09-16 10:36:22
【问题描述】:

我有一个像这样的 hasOne(Many) 关系函数:

return $this->hasOne('App\Models\ProductTranslation','product_id','id')->where('language_id', $language_id['id']);

另外,我尝试使用

return $this->hasOne('App\Models\ProductTranslation','product_id','id')->select('product_translations.name')->where('language_id', '1');

在Controller中使用这个

$value=Product::with('translation:name')->find(1);

我尝试从表中只接收一个特定列,但它返回了一个空数组。在调试栏中,当我在 PHPMyAdmin 中使用它时,我看到了查询,它只返回我想要的一列。

这可能吗?

P.S(使用 Laravel 5.8.34)

更新

我在项目中选择“翻译字段和非翻译字段的实体层”方法进行翻译,并且有一个类似 Database picture 的数据库

【问题讨论】:

  • select() 必须始终包含外键列。
  • 由您评论解决@TharakaDilshan $value=Product::with('translation:name,**product_id**')->find(1);

标签: php laravel eloquent laravel-5.8 eloquent-relationship


【解决方案1】:

如果您只想获得那种 language_id 类型的翻译,那么您可以这样做。

$language_id = 1;
$products = Product::with(array('translation'=>function($query) use($language_id){
    $query->where('language_id',$language_id);
}))->get();

如果你想选择名字然后像这样 确保你必须选择 id,name id 是必须的。

$language_id = 1;
$products = Product::with(array('translation'=>function($query) use($language_id){
    $query->where('language_id',$language_id)->select('id','name');
}))->get();

从模型中删除 where 条件。

根据您在 Language 中的数据库结构,它是带角色的 belongsToMany

Languages.php 模型

public function role(){
    returh $this->belongsToMany('App\Models\Role','role_translations','language_id','role_id')
}

$language_id = 1;
$products = Product::with(array('translation.role'=>function($query) use($language_id){
    $query->where('role_translations.language_id',$language_id)->select('languages.id','languages.name');
}))->get();

【讨论】:

  • 这个解决方案不适合我模型return $this->hasMany('App\Models\ProductTranslation','product_id','id');控制器$language_id = 1; $products = Product::with(array('translation'=>function($query) use($language_id){ $query->where('language_id',$language_id)->select('id','name'); }))->get();我选择“翻译字段和非翻译字段的实体层”在项目中进行翻译,并有一个这样的数据库@ 987654321@
  • 是的,通过评论了解 select 必须是外键列
  • 你找到解决方案了吗?
  • 是的,你的回答很好,以后想想我会用什么。
猜你喜欢
  • 1970-01-01
  • 2020-11-06
  • 2015-04-18
  • 2021-06-05
  • 1970-01-01
  • 2018-01-06
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多