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
where
breed_id
=1和
breeds
breed_id
不为空)那么我假设你没有在你的模型中建立品种和猫之间的关系?我的意思是,我基本上做了和你编辑时一样的事情。我更新了我原来的帖子。仅供参考,除了我的小技巧之外,所有代码都直接来自《laravel 5 essentials》(一本错误数量惊人的新书)。很好,相关代码总是让它变得更容易。看起来这两种型号都是指
Furbook\Breed
cats()
函数中的一个应该是
Furbook\Cat
。这也解释了上面的SQL错误——Laravel正在尝试搜索您的猫品种表。