首页 文章

Laravel 5 |多对多关系不起作用

提问于
浏览
0

我是laravel5的新手 . 我使用“多对多”关系来获取基于给定标记的所有消息 .

消息模型:

function tags(){
      return $this->belongsToMany('App\tags')->withTimestamps();
    }

标签模型:

public function messages() {
     return $this->belongsToMany('App\messages', "messages_tags",     "messages_id", "tags_id");
  }

我的输入:

$tag = App\tags::where('name','public')->first();

($ tag :)

App\tags {#681
 id: "5",
 name: "Public",
 created_at: "2016-02-10 13:51:36",
 updated_at: "2016-02-10 08:21:36",
 }

我试图用标签获取消息 .

$tag->messages()->get();

我的输出:

[]

但我有标签“公共”的消息 .

我的代码有什么问题?

2 回答

  • 0

    tags() 方法的 Message 模型中,您还应提供 messages_tags 透视表名称(包括"messages_id"和"tags_id")并访问 messages ,您应该使用:

    $tag->messages;
    

    或者您可以使用(Eagre loading):

    $tag = App\tags::with('messages')->where('name','public')->first();
    

    然后使用:

    $tag->messages;
    
  • 2

    参考:https://laravel.com/docs/5.1/eloquent-relationships#many-to-many

    你有任何与给定标签相关的消息吗?

    $tag = App\tags::where('name','public')->first();
    dd($tag->messages()->get());
    

相关问题