【问题标题】:How to pick only certain columns when eager loading急切加载时如何仅选择某些列
【发布时间】:2014-10-31 16:42:55
【问题描述】:

在 laravel 中进行预加载时,有没有办法只选择某些列?

$columns = ['col_1', 'col_2', 'col_3'];
$model = MyModel::findOrFail(Input::get('id'), $columns);
$model->load('position');

在我定义的模型中:

public function position() {
    return $this->belongsToMany('Position', 'mymodel_positions')->withTimestamps();
}

当我不提供像 MyModel::findOrFail(id) 这样的 $columns 参数时。职位是 正确加载。但是,如果我确实提供了 $columns,则位置 ale 总是空的。

我想要什么:急切地加载关系并指定列(不是加载关系中的列)。我确定这是可能的,但我就是不明白......

希望得到您的帮助。

【问题讨论】:

  • 我不这么认为。您链接中的问题是关于在热切加载的模型中指定列。我认为我的问题不同。我已经看到你提到的那个问题了。我的问题是关于指定列并另外加载模型。
  • 您为什么不想按照您的需要格式化模型?

标签: laravel-4


【解决方案1】:

tldr;你总是需要SELECT关系的主键和对应的外键。

很可能是这样的:

$columns = ['col_1', 'col_2', 'col_3'];

不包含模型的主键,因此 Eloquent 无法匹配相关模型。

话虽如此,您只需要:

$columns = ['id', 'col_1', 'col_2', 'col_3'];

或任何作为主键的字段。

【讨论】:

    猜你喜欢
    • 2014-09-08
    • 2020-08-01
    • 2015-05-08
    • 2021-01-21
    • 2020-12-22
    • 2019-07-29
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    相关资源
    最近更新 更多