Laravel 关系总是返回空数组
Posted
技术标签:
【中文标题】Laravel 关系总是返回空数组【英文标题】:Laravel relationship always returning empty array 【发布时间】:2021-09-08 05:31:05 【问题描述】:我在 Laravel 应用程序中有两个模型 Ft
和 Fi
。
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
字段的类型为 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 关系总是返回空数组的主要内容,如果未能解决你的问题,请参考以下文章