Laravel ORM多对多关系就像一对多

时间:2019-01-25 05:59:38

标签: php laravel orm

我的问题是我试图在职位和体裁之间建立多对多关系。这是我到目前为止所做的。

class Post extends Model
{

    public function genres()
    {
        return $this->belongsToMany('App\Genre');
    }

}

class Genre extends Model
{
    public function posts()
    {
        return $this->hasMany('App\Post');
    }

}

类型表

+----+--------+
| id |  name  |
+----+--------+
|  1 | News   |
|  2 | Sports |
+----+--------+

张贴表格

+----+----------------+
| id |     title      |
+----+----------------+
|  1 | Political News |
|  2 | Sport Update   |
+----+----------------+

genre_post表

+----+---------+----------+
| id | post_id | genre_id |
+----+---------+----------+
|  1 |       1 |        1 |
|  2 |       1 |        2 |
|  3 |       2 |        2 |
+----+---------+----------+

当我尝试查看帖子的体裁列表时,一切正常。

Post::where('slug', '=', $id)->with("genres")->first(); // no problem

但是当我尝试相反的操作时,它不起作用。

$posts = Genre::where( "slug", "=", $id )->with("posts")->first();

我遇到以下错误。

  

未找到列:1054“ where”中的未知列“ post.genre_id”   子句”(SQL:从post中选择*,其中postgenre_id

我了解到laravel试图从genre_id表中访问post列,因为该列是多对多的关系,这意味着一个帖子可以包含一个以上的类型,而一个类型可以包含一个以上的类型包含多个帖子。

任何想法我该如何解决?

1 个答案:

答案 0 :(得分:1)

这是可以预期的,因为if(myWifiManager.isWifiEnabled()){ System.out.println("Toggle Wifi Enabled going to disable"); myWifiManager.setWifiEnabled(false); } else{ System.out.println("Wifi Disabled going to enable "); if(Settings.System.getInt(context.getContentResolver(),Settings.System.AIRPLANE_MODE_ON, 0) != 0){ Runtime.getRuntime().exec("adb shell settings put global airplane_mode_radios cell,nfc,wimax,bluetooth"); } myWifiManager.setWifiEnabled(true); System.out.println("WI: "+myWifiManager.isWifiEnabled()); } 本身是一对多的关系。请改用hasMany

belongsToMany