2015-05-09 2 views
0

У меня есть два простых таблицы, кошек и породы:Laravel 5 - Красноречивый РЕГИСТРИРУЙТЕСЬ путаницы

mysql> select * from cats; 
+----+--------+---------------+----------+---------------------+---------------------+ 
| id | name | date_of_birth | breed_id | created_at   | updated_at   | 
+----+--------+---------------+----------+---------------------+---------------------+ 
| 1 | Rita | 2008-07-06 |  1 | 2015-05-09 20:40:49 | 2015-05-09 20:50:20 | 
| 2 | Muni | 1992-05-15 |  3 | 2015-05-09 20:50:54 | 2015-05-09 20:50:54 | 
| 3 | Hector | 2005-01-23 |  4 | 2015-05-09 21:08:23 | 2015-05-09 21:08:23 | 
+----+--------+---------------+----------+---------------------+---------------------+ 
3 rows in set (0.00 sec) 

mysql> select * from breeds; 
+----+------------+ 
| id | name  | 
+----+------------+ 
| 1 | Domestic | 
| 2 | Persian | 
| 3 | Siamese | 
| 4 | Abyssinian | 
+----+------------+ 
4 rows in set (0.00 sec) 

Все, что я хочу сделать, это получить список кошек, которые имеют определенную породу. В таблице кошек, breed_id - это FK, который указывает на PK таблицы пород. Пример код в моей книге, которая должна возвращать взгляд со всеми кошками определенной породы не возвращает результатов:

URL Я пытаюсь это/кошки/породы/Бытовые

вида, который генерируется использует эта логика в файле routes.php:

Route::get('cats/breeds/{name}', function($name) 
{ 
    $cats = Furbook\Cat::with('breeds') 
     ->whereName($name) 
     ->get(); 
dd($cats); 
}); 

Когда я д.д. ($ кошкам) я получаю нулевой результат, даже если у меня есть кошка с внутренним breed_id из 1. Что я сделал не так?

EDIT:

я могу заставить его работать со следующим Hacky кода, который первым получает идентификатор из таблицы пород, запрашивая от поля имени, затем запрашивает таблицу кошек с этим ID:

$breed = Furbook\Breed::whereName($name)->get(); 
$id = $breed[0]['attributes']['id']; 
$cats = Furbook\Cat::whereId($id)->get(); 

Как сделать это одним полезным запросом? Я не вижу примеров такого запроса на сайте Laravel.

Для получения дополнительной информации это как модели выглядят:

class Breed extends Model { 

    public $timestamps = false; 

    public function cats() 
    { 
     return $this->hasMany('Furbook\Breed'); 
    } 

} 

class Cat extends Model { 

    protected $fillable = [ 
     'name', 
     'date_of_birth', 
     'breed_id', 
    ]; 

    public function breed() 
    { 
     return $this->belongsTo('Furbook\Breed'); 
    } 

} 

ответ

2

Вы просите систему, чтобы дать вам все кошки с именем Domestic - не все кошки названия породы Domestic.

Предполагая, что ваши отношения модели в порядке, вы можете сделать это, например.

$cats = Furbook\Breed::whereName($name)->first()->cats; 

Кроме того, моя бирманская кошка просто попала на монитор; Я думаю, она расстроена тем, что она не в списке пород.

+0

Ваше решение вызвало ошибку sql. Я могу поделиться им, если вы хотите это увидеть. В основном он запрашивал таблицу пород с полем, которое существует только у кошек, breed_id. –

+0

fyi it "SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'breeds.breed_id' в 'where clause' (SQL: выберите * из' breeds', где 'breeds'.'breed_id' = 1 и' breeds'. 'breed_id' не является нулевым)« –

+0

Тогда я полагаю, вы не установили отношения между породами и кошками в ваших моделях? Я имею в виду, что я делаю то же самое, что и в вашем редактировании. –