【问题标题】:Laravel "many to many" query the relation with "where"Laravel“多对多”查询与“where”的关系
【发布时间】:2014-03-08 14:29:53
【问题描述】:

先看代码:

<?php

class User extends Eloquent {

    public function books() 
    {
        return $this->belongsToMany('Book');
    }
}

class Book extends Eloquent {

    public function users() 
    {
        return $this->belongsToMany('User');
    }
}

我想找到一个 id 为 '1' 的用户,并获得与某物相等的书名,就像这样

  User::with(array('Book' => function($query) 
  {
      $query->where('bookname','www')->get();
  }));

但它返回用户信息和空数组, 用户:{ 名称:'xxx', xxx: 'xxx', 书籍:[] };

谁能帮我解决这个问题?非常感谢!

【问题讨论】:

  • 为什么在where查询中使用get()方法?
  • but..with get() or not,导致相同的查询结果
  • 但是当我用 'www11' 和其他人查询时,它的工作原理,我很困惑
  • 您的数据透视表设置正确吗?

标签: php laravel laravel-4


【解决方案1】:

试试:

$user = User::find($user_id)->books()->where('bookname', '=', 'www')->first();

这些也可能对您有所帮助:

用书吸引所有用户:

$users = User::with('books')->get();

抓取所有有书的用户:

$users = User::has('books')->get();

用书吸引单个用户:

$user = User::with('books')->find($user_id);

【讨论】:

  • 我知道还有另一种方法:User::find(1)->books()->where('xx','xx')->get()...但我想要使用查询范围
【解决方案2】:

如果你想使用查询范围,你可以在你指定的范围内应用连接。

class User extends Eloquent {

    public function books() 
    {
        return $this->belongsToMany('Book');
    }

    public function scopeByBookName($q, $bookName) {
        return $q->join('user_books as pivot', 'pivot.user_id', '=', 'users_id')
            ->join('books', 'books.id', '=', 'pivot.book_id')
            ->where('books.name', $bookName);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-02
    • 2015-05-29
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 2019-01-04
    相关资源
    最近更新 更多