【问题标题】:Laravel 4 Eager Load Constraints with BelongsToLaravel 4 带有 BelongsTo 的急切负载约束
【发布时间】:2014-08-19 22:35:39
【问题描述】:

我有两个模型...飞机和运动:

在飞机上:

public function movements() {
    return $this->hasMany('Movement');
}

在运动中:

public function aircraft() {
    return $this->belongsTo('Aircraft');
}

桌子移动:

Schema::create('movements', function($table)
    {
        $table->increments('id');
        $table->boolean('flag_visible')->default(1);
        $table->integer('aircraft_id')->nullable()->default(NULL);
        $table->timestamps();
    });

台式飞机:

Schema::create('aircrafts', function($table)
    {
        $table->increments('id');
        $table->string('identifier');
        $table->timestamps();
    });

现在我想选择标识符 = 10 的飞机的所有运动:

$movements = Movement::with(array(
            'aircraft' => function($query) {
                $query->where('identifier', 'like', '%10%');
            }
        ));

我只有一个移动记录,其标识符为 %10% 的飞机 ID。 但是我得到了所有的移动记录,只有具有正确标识符的那个具有“飞机”的关系。但是我想要一个只有一个记录的数组,只有一个具有正确标识符的数组。这里有什么问题?

【问题讨论】:

    标签: laravel constraints eager-loading belongs-to


    【解决方案1】:

    with() 创建一个单独的查询来一次检索所有相关值(急切加载),而不是按需(延迟加载)。

    您正在寻找对移动查询添加约束,因此您应该使用 whereHas(),如下所示:

    $movements = Movement::whereHas('aircraft', function($q)
    {
        $q->where('identifier', 'like', '%10%');
    
    })->get();
    

    【讨论】:

      猜你喜欢
      • 2013-12-25
      • 2015-03-19
      • 2020-02-26
      • 2015-05-29
      • 2015-11-17
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      相关资源
      最近更新 更多