【问题标题】:Eloquent laravel --> Eager Loading雄辩的 laravel --> 渴望加载
【发布时间】:2017-12-28 20:30:39
【问题描述】:

我有下一个结构:

模型调用内容

public function credits(){

    return $this->belongsToMany('App\models\Credit');
}

模型调用学分

 public function content()
{
    return $this->belongsToMany('App\models\Content');
}

我想做的是提取一个内容的所有学分,但只选择我想要的列,使用以下代码:

$credits2=$this->content::with(array('credits'=>function($query){
        $query->select('id','department','job');
 }))->where('id',$id_content)->get();

我遇到的问题是,当我执行所有代码时,结果是:

[]

但如果我在 mysql 中进行正常查询,我可以找出电影存在学分。

我已从其他论坛和 stackoverflow 帖子中提取了此代码。

【问题讨论】:

  • DB 中似乎没有 contentid = $id_content
  • 这是因为我打印了 $id_content 我在数据库中手动搜索它并返回给我电影
  • 将此代码放在查询 dd($this->content::find($id_content)); 之前。输出是什么?
  • 这是多对多的关系吗?我认为你的模型关系是错误的
  • 我已经解决了这个问题,我很弱智。 $id_content 不是整数,是先前查询的对象。因此,如果我将查询更改为$id_content->id,我的问题就解决了。对不起

标签: php laravel slim laravel-eloquent


【解决方案1】:

还有另一种不使用闭包来指定列的简单方法:

 $credits2 = $this->content::with('credits:credits.id,department,job')
                  ->find($id_content->id);

【讨论】:

    【解决方案2】:

    问题在于 $id_content 是先前查询的结果,所以如果我输入 $id_content 不起作用,我必须访问该列。

    解决办法是:

    $credits2=$this->content::with(array('credits'=>function($query){
        $query->select('id','department','job');
     }))->where('id',$id_content)->get();
    

    【讨论】:

      猜你喜欢
      • 2015-09-18
      • 2020-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      相关资源
      最近更新 更多