当前位置: 首页 > 知识库问答 >
问题:

雄辩的"选择"方法不工作与使用"with"方法

夏高朗
2023-03-14

我的村庄模型;

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

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

我的地图类迁移;

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();
});

我的“村庄”方法在“村庄管理员”课上;

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-

{
  "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-

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


共有1个答案

赵飞语
2023-03-14

当您尝试急切地加载具有

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

发生了三件事:

  1. 雄辩地载入所有村庄
  2. 雄辩地加载所有位置
  3. Eloquent使用field_id列为相应的村庄对象指定位置

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

当你这么做的时候

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

您只从位置表中获取x和y列。field_id列没有被获取,这就是为什么Eloquent无法用Village对象获取它们,这就是为什么您在位置集合中获得null。

替换

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

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

使代码按预期工作。

 类似资料:
  • 我的村庄模式; 我的地图类迁移;

  • 我正在做一个Spring Boot Thymeleaf项目。我有文件,其中的片段用于其他超文本标记语言文件,以避免重写代码。 ,其中填充了客户端ID。 我已经在文件。 现在,我尝试在选择任何一个select选项时进行ajax调用,以将它们保存在session对象中。为此,我在。 但当选择选择选项时,永远不会调用此脚本。 我也试过: 我想通过这段代码实现的是:当选择任何一个select选项时,将调用

  • 嗨,我正在学习laravel。我使用雄辩的ORM删除方法,但我得到了不同的结果。不是真的或假的,而是空的。我设置了一个资源路由,在UsersController中有一个销毁方法。 但是我总是得到一个响应{“status”:“0”,“msg”:“failed”},数据库中的记录被删除。 然后我使用dd($res)。它在页面中显示null。 但是从课程中我学习到它返回一个布尔值true或false。

  • 我已在模型中设置变量。我想测试功能,但出现以下错误: SQLSTATE[42S22]:未找到列:“字段列表”中的1054未知列“\u方法”(SQL:updateset=临时水生领袖,=放置,=2,=这是我的描述,=2014-05-29 17:05:11其中客户id=1和=2) 当我的fillable没有这个参数时,为什么要对大喊大叫?我的更新功能是:

  • 请查看下面的代码。 我在“CompletedService”中有多条记录,并且在account表中有一个父id account\u id。我和你约会是为了钱。 ASC和DESC已经尝试过了。 尝试按whereHas排序,但不会影响任何记录。下面是模型关系。 我不需要在模型中使用orderby,因为我多次使用了这个关系,并且在这个查询中只需要orderby。 与一个已完成的服务记录关系只有一个账户。

  • 我有一个小问题,当我试图通过使用雄辩的模型在列中创建_来排序记录时。订单是按日期而不是按时间进行的。例如,如果我有3条记录的值为created_at: > 2017-07-04 07:16:33 2017-07-04 05:35:01 2017-07-04 05:27:48 使用orderby('created_at','desc')或'asc'时,我有相同的输出。但是,如果我有,订购就可以了 2