Laravel“多对多”查询与“where”的关系

时间:2014-03-08 14:29:53

标签: php laravel laravel-4

首先看一下代码:

<?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',       书籍:[]      };

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

2 个答案:

答案 0 :(得分:0)

尝试:

$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);

答案 1 :(得分:0)

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

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);
}