【问题标题】:Laravel: Query Many to Many Pivot tableLaravel:查询多对多数据透视表
【发布时间】:2019-02-27 22:06:47
【问题描述】:

我有一个应用程序,用户可以在其中拥有多本书。我已经建立了关系和中介表。但查询不起作用。

图书模型

    public function user(){
    return $this->belongsToMany('App\Book', 'book_user');
    }

用户模型

public function book(){
        return $this->belongsToMany('App\User', 'book_user');
    }

创建 user_book 表迁移:

  public function up()
    {
        Schema::create('book_user', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('book_id')->unsigned();
            $table->foreign('book_id')->references('id')->on('books');

            $table->integer('user_id')->unsigned();
            $table->foreign('user_id')->references('id')->on('users');
        });
    }

图书控制器我将 book_id 和 user_id 添加到表中

   public function readlist(Book $book)
    {
        DB::table('book_user')->insert(
            ['user_id' => auth()->id(), 
            'book_id' => request('book_id')]
        );

    }

在我的家庭控制器中,我尝试访问与用户相关的书籍,但结果返回 Null;

 public function index()
{   
    $user = Auth::user();
    $userbooks =$user->books;
    dd($userbooks);

    return view('/home');
}

【问题讨论】:

  • 你为什么选择DB而不是雄辩的attach()方法?
  • 我想你也需要很多
  • 在您的用户模型中您编写了 book,但在家庭控制器中您编写了 $user->books

标签: php laravel


【解决方案1】:

用户拥有多本书,

图书有多个用户,

关系是多对多, 最好定义 User 模型:

public function users(){
  return $this->belongsToMany('App\Book', 'book_user');
}

在你的 Book 模型中

public function books(){
    return $this->belongsToMany('App\User', 'book_user');
}

文档链接:https://laravel.com/docs/5.7/eloquent-relationships#many-to-many

【讨论】:

    【解决方案2】:

    首先在你的用户模型中将book() 方法重命名为books() :)

    那么你可以尝试这样做:

    public function readlist(Request $request)
        {
            Auth::user()
            ->books()
            ->attach($request->get('book_id'));
    
        }
    

    【讨论】:

    • 谢谢!我现在如何查询与用户相关的所有书籍?
    • $your_user->书籍
    猜你喜欢
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-05
    • 2014-12-13
    • 2019-03-25
    • 2018-09-23
    • 1970-01-01
    相关资源
    最近更新 更多