【问题标题】:Not detecting relations between classes using Eloquent不使用 Eloquent 检测类之间的关系
【发布时间】:2019-10-17 01:50:09
【问题描述】:

我有 2 节课。链接和信息需要连接。 Info 类有一个 Link_id,而 Link 有一个 User_id。

我希望用户在他们的个人仪表板中看到他们的链接信息。所以一个用户,有很多链接,一个链接有很多信息。

链接模型有:


    public function infos()
    {
        return $this->hasMany('info');

    }
}

信息模型有:


    public function link()
    {
        return $this->belongsTo('link');
    }

仪表板有一个控制器。 我设法通过搜索 user_id 来获取所有链接

$linksByOwner = Link::where('user_id',$user_id)->get();

现在我正在尝试访问链接中的信息。我试过这个:

    $collectedData = $linksByOwner->infos(); < Not working
    $collectedData = Info::where('link_id',19)->info(); < Not working

    dd($collectedData);

这给了我以下错误:

Method Illuminate\Database\Eloquent\Collection::infos does not exist.

一些额外的信息: 两个模型在数据库迁移中都有一个外键连接到它们

$table->foreign('user_id')
                ->references('id')->on('users')
                ->onDelete('cascade');
 $table->foreign('link_id')
                ->references('id')->on('links')
                ->onDelete('cascade');

有人可以告诉我如何解决这个问题吗?是范围界定错误吗?我需要以不同的方式连接这些类吗?

【问题讨论】:

  • “info”和“link”表的正确名称是什么?

标签: php laravel eloquent


【解决方案1】:

您可以从您拥有的链接集合中pluck infos(假设关系设置正确):

$linksByOwner = Link::with('infos')->where('user_id', $user_id)->get();

$infos = $linksByOwner->pluck('infos');

【讨论】:

  • 这个 pluck 返回一个数组。是否可以让它返回一个对象?
  • pluck 返回一个新的集合(对象),而不是一个数组
【解决方案2】:

$linksByOwnerCollectionLink 模型;除非您遍历每个关系,否则您无法访问关系 (infos)。

$linksByOwner = Link::with(['infos'])->where('user_id',$user_id)->get();
foreach($linksByOwner AS $linkByOwner){
  $collectedData = $linkByOwner->infos; // Don't need the `()` here
  dd($collectedData); // Should be a `Collection` of `Info` models
}

另请注意,return $this-&gt;belongsTo('link');return $this-&gt;hasMany('info'); linkinfo 应该是 'App\Link'/'App\Info'App\Link::class/App\Info::class 或者,如果您要导入 Link 和 @ 987654335@ 通过use App\Link;use App\Info;,然后'Link'/'Info'Link::class/Info::class

我不确定'link''info' 是否会正确引用您的模型:

public function infos(){
  return $this->hasMany(App\Info::class);
}

public function link(){
  return $this->belongsTo(App\Link::class);
}

【讨论】:

    【解决方案3】:

    请尝试修改 Eloquent 关系,表明它是一个类。

    public function links(){
       return $this->hasMany(Link::class);
    }
    

    【讨论】:

    • 您好!我像你说的那样更改了链接和信息类,它给出了同样的错误: public function links() { return $this->belongsTo(Link::class); }
    猜你喜欢
    • 2013-05-14
    • 2019-08-24
    • 2013-09-28
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 2013-11-14
    相关资源
    最近更新 更多