У меня есть два простых таблицы, кошек и породы: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');
}
}
Ваше решение вызвало ошибку sql. Я могу поделиться им, если вы хотите это увидеть. В основном он запрашивал таблицу пород с полем, которое существует только у кошек, breed_id. –
fyi it "SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'breeds.breed_id' в 'where clause' (SQL: выберите * из' breeds', где 'breeds'.'breed_id' = 1 и' breeds'. 'breed_id' не является нулевым)« –
Тогда я полагаю, вы не установили отношения между породами и кошками в ваших моделях? Я имею в виду, что я делаю то же самое, что и в вашем редактировании. –