【问题标题】:Unexpected Results in Laravel Eager Loading With Constraints带有约束的 Laravel Eager Loading 中的意外结果
【发布时间】:2014-12-07 13:51:51
【问题描述】:

我有两张桌子:assetsasset_classifications。这些表是一对多的关系,asset 有一个资产分类,asset_classifications 有很多资产。

例如,我正在尝试运行查询以获取所有 asset_classification 名称为“laptops”的资产。我试图通过运行这个带有约束的急切负载来做到这一点:

$laptops = Asset::with(array('classification'=>function($query){
    $query->where("name","=","laptops");
}))->get();

foreach($laptops as $laptop){
    echo $laptop->serial_number."<br/>";
}

name 是来自asset_classifications 表的列。通过为我的AssetAssetClassification 模型设置所需的方法,我已经形成了一对多的关系。

我急切加载的问题在于它获取了所有资产,似乎忽略了我试图仅获取“笔记本电脑”的急切加载约束。我认为问题在于我的代码或我对急切加载的理解,但我不知道是哪一个。我还是新手,希望有人能帮助我。

【问题讨论】:

    标签: laravel-4 eloquent eager-loading


    【解决方案1】:

    with用于过滤相关模型,而whereHas用于通过相关表约束过滤主查询模型:

    $laptops = Asset::whereHas('classification', function ($query) {
        $query->where("name","=","laptops");
    })->get();
    

    【讨论】:

    • 为我工作。谢谢! :)
    • 虽然我不太明白 whereHas 和急切加载约束之间的区别。
    • 不同之处在于:with 加载所有资产但仅过滤相关分类,而 whereHas 按相关分类过滤资产(并且根本不加载后者,除非您使用 @987654326再次@..)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 2021-06-05
    • 1970-01-01
    • 2017-08-19
    相关资源
    最近更新 更多