Laravel 5-雄辩的连接混乱
我有两张简单的桌子,猫和品种:Laravel 5-雄辩的连接混乱,laravel,eloquent,Laravel,Eloquent,我有两张简单的桌子,猫和品种: mysql> select * from cats; +----+--------+---------------+----------+---------------------+---------------------+ | id | name | date_of_birth | breed_id | created_at | updated_at | +----+--------+---------------
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表中,bride_id是一个FK,它指向brides表的PK。我书中的示例代码应该返回一个包含所有特定品种猫的视图,但不返回任何结果:
我正在尝试的url是/cats/breeds/homesel
生成的视图在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字段从brides表中获取id,然后使用该id查询cats表:
$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');
}
}
您要求系统为您提供所有名为
家猫
——并非所有品种名为家猫
假设你的模型关系是有序的,你可以这样做
$cats = Furbook\Breed::whereName($name)->first()->cats;
还有,我的缅甸猫刚刚撞到显示器;我认为她对自己不在“品种”列表中感到不安。您的解决方案产生了sql错误。如果你想看,我可以和你分享。它基本上是用一个只存在于猫中的字段来查询品种表的,breed_id.fyi它是“SQLSTATE[42S22]:未找到列:在where子句中的1054未知列'breeds.breed_id'(SQL:select*from
breeds
wherebreed_id
=1和breeds
breed_id
不为空)那么我假设你没有在你的模型中建立品种和猫之间的关系?我的意思是,我基本上做了和你编辑时一样的事情。我更新了我原来的帖子。仅供参考,除了我的小技巧之外,所有代码都直接来自《laravel 5 essentials》(一本错误数量惊人的新书)。很好,相关代码总是让它变得更容易。看起来这两种型号都是指Furbook\Breed
;cats()
函数中的一个应该是Furbook\Cat
。这也解释了上面的SQL错误——Laravel正在尝试搜索您的猫品种表。