我有两个简单的桌子,猫和品种:
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是一个指向品种表PK的FK。我书中的示例代码应该返回一个特定品种的所有猫的视图,但不会返回结果:
我正在尝试的网址是/ cats / braeds / Domestic
生成的视图在routes.php文件中使用此逻辑:
Route::get('cats/breeds/{name}', function($name)
{
$cats = Furbook\Cat::with('breeds')
->whereName($name)
->get();
dd($cats);
});
当我dd($ cats)时我得到零结果,即使我有一只国内品种为1的猫。我在这里做错了什么?
编辑:
我可以使用以下hacky代码,它首先通过查询name字段从breeds表中获取id,然后使用该id查询cats表:
$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');
}
}
答案 0 :(得分:2)
您要求系统为您提供名称为Domestic
的所有猫 - 并非所有品种名为Domestic
的猫。
假设您的模型关系正常,您可以这样做。
$cats = Furbook\Breed::whereName($name)->first()->cats;
另外,我的缅甸猫刚刚击中显示器;我觉得她很不高兴她不在品种名单中。