gpt4 book ai didi

php - Eloquent "select"方法不适用于使用 "with"方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:04:45 27 4
gpt4 key购买 nike

我的村庄模型;

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class Village extends Model {
public function positions() {
return $this->belongsTo(Map::class, 'id', 'field_id');
}
}

我的 map 类迁移;

Schema::create('map_data', function (Blueprint $table) {
$table->increments('id');
$table->integer('field_type');
$table->integer('field_id');
$table->string('x');
$table->string('y');
$table->timestamps();
});

我在“VillageController”类上的“villages”方法;

public function villages() {
$villages = Village::with([
'positions' => function ($query) {
$query->select('x', 'y');
}
])->get();

return $villages;
}

结果;

{
"villages": [
{
"id": 1,
"name": "village 1",
"created_at": "2016-10-26 18:36:34",
"updated_at": "2016-10-26 18:36:34",
"positions": null
},
{
"id": 2,
"name": "village 2",
"created_at": "2016-10-26 18:36:34",
"updated_at": "2016-10-26 18:36:34",
"positions": null
}
]
}

只需要提到“选择”方法,而不是列返回NULL。

如果我删除 $query->select('x', 'y'); 代码将返回以下结果。

{
"villages": [
{
"id": 1,
"name": "village 1",
"created_at": "2016-10-26 18:36:34",
"updated_at": "2016-10-26 18:36:34",
"positions": {
"id": 1,
"field_type": "1",
"field_id": "1",
"x": "21",
"y": "21",
"created_at": "2016-10-26 18:36:34",
"updated_at": "2016-10-26 18:36:34"
}
},
{
"id": 2,
"name": "village 2",
"created_at": "2016-10-26 18:36:34",
"updated_at": "2016-10-26 18:36:34",
"positions": {
"id": 2,
"field_type": "1",
"field_id": "2",
"x": "0",
"y": "0",
"created_at": "2016-10-26 18:36:34",
"updated_at": "2016-10-26 18:36:34"
}
}
]
}

但是我使用了$query->select('x');代码,结果应该如下

资源:https://stackoverflow.com/a/32185643/3287225

最佳答案

当您尝试加载村庄的位置关系时

Village::with(['positions'])->get();

发生了 3 件事:

  1. Eloquent loads all villages
  2. Eloquent 加载所有位置
  3. Eloquent 使用 field_id 列将位置分配给相应的 Village 对象

为了让它工作,获取的位置需要获取 field_id 列,否则 Eloquent 无法将它们与相应的村庄匹配。

当你做的时候

$query->select('x', 'y');

您只从位置表中获取 xy 列。 field_id 列未被获取,这就是为什么 Eloquent 无法使用 Village 对象获取它们,这就是为什么您得到 null 而不是位置集合。

替换

$query->select('x', 'y');

$query->select('field_id', 'x', 'y');

使您的代码按预期工作。

关于php - Eloquent "select"方法不适用于使用 "with"方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40272411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com