首页 > 解决方案 > Laravel 关系总是返回空数组

问题描述

我在 Laravel 应用程序中有两个模型FtFi.

Ft包含以下代码:

protected $table = 'ft';

protected $connection = 'XXX';

protected $keyType = 'string';

public function lines()
{
    return $this->hasMany('App\Fi', 'ftstamp', 'ftstamp');
}

Fi包含以下代码:

protected $table = 'fi';

在我的控制器中,我有以下代码

Ft::select($fields)->with(['lines'])

所有结果都有"lines": []

关系存在于数据库中。

数据库是 SQL Server

ft.ftstamp并且fi.ftstamp字段是 type char

用于连接的驱动程序是sqlsrv.

标签: sql-serverdatabaselaravelormrelationship

解决方案


我确定这是重复的,但我找不到。如果您只从表中选择某些字段,请确保主键是其中之一。急切加载是作为单独的查询完成的,而不是连接,因此键值必须可用。

例如,这段代码:

User::select(["id", "name"])->with("posts")->get();

运行两个数据库查询:

SELECT id, name FROM users;
SELECT * FROM posts WHERE user_id IN (?, ?, ?, ?...);

第二个查询填充了id第一个查询的值。如果没有这些值,则无法运行第二个查询。

在普通数据库中,这意味着确保数组$fields包含“id”作为元素,我将提供一个代码示例。但是,您的数据库看起来很可怕,所以我不会尝试。


推荐阅读