Laravel 关系总是返回空数组

Posted

技术标签:

【中文标题】Laravel 关系总是返回空数组【英文标题】:Laravel relationship always returning empty array 【发布时间】:2021-09-08 05:31:05 【问题描述】:

我在 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.ftstampfi.ftstamp 字段的类型为 char

用于连接的驱动程序是sqlsrv

【问题讨论】:

你试过Ft::select($fields)->with(['lines'])->toSql()看看它试图运行什么查询吗? @JustCarty 这返回“选择 [ftstamp], [fno], [no], [ftano], [fdata], [nome], [pdata], [etotal], [nmdoc] from [英尺]" 【参考方案1】:

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

例如这段代码:

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

运行两个数据库查询:

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

第二个查询由第一个查询中的id 值填充。没有这些值,就无法运行第二个查询。

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

【讨论】:

我做了一个监听器来记录所有的查询。第二个查询出现在日志中。 select * from [fi] where [fi].[ftstamp] in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 但结果集是: [ "ftstamp": "ADM15071434897 ,392995282", "fno": 1, "no": 3, "ftano": 2015, "fdata": "2015-07-14 00:00:00.000", "nome": "Santa Casa da Misericórdia de Lagos ", "pdata": "2015-07-29 00:00:00.000", "etotal": "466.120000", "nmdoc": "Fatura", "lines": [] , ... ]

以上是关于Laravel 关系总是返回空数组的主要内容,如果未能解决你的问题,请参考以下文章

为啥 laravel 雄辩的关系返回空数组

为啥 laravel 返回一个空数组来表示一个有很多关系?

为啥 laravel 返回一个空数组来表示一个有很多关系?

Laravel 4 belongsToMany 关系返回空

Laravel:每当我返回一个模型时,总是返回一个与它的关系

Laravel Eloquent 一对一关系返回空集合