【发布时间】:2015-07-20 15:18:24
【问题描述】:
我有两个简单的表格,猫和品种:
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)
我想要做的就是获取某个品种的猫的列表。在cats 表中,breed_id 是一个FK,指向breeds 表的PK。我书中的示例代码应该返回包含特定品种的所有猫的视图,但没有返回结果:
我正在尝试的网址是 /cats/breeds/Domestic
生成的视图在 routes.php 文件中使用了这个逻辑:
Route::get('cats/breeds/{name}', function($name)
{
$cats = Furbook\Cat::with('breeds')
->whereName($name)
->get();
dd($cats);
});
当我 dd($cats) 时,即使我有一只家养品种 ID 为 1 的猫,我也得到零结果。我在这里做错了什么?
编辑:
我可以让它与以下 hacky 代码一起工作,它首先通过查询 name 字段从品种表中获取 id,然后使用该 id 查询 cat 表:
$breed = Furbook\Breed::whereName($name)->get();
$id = $breed[0]['attributes']['id'];
$cats = Furbook\Cat::whereId($id)->get();
如何将其变成一个 Eloquent 查询?我在 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');
}
}
【问题讨论】: