laravel 两个相同的 belongsTo() 关系,一个 returns 一个数组另一个字符串

laravel two identical belongsTo() relations, one returns an array another string

我不明白我有两个设置相同的外键和两个 belongsTo() 函数,但其​​中一个不能正常工作,它没有返回数组而是 returns 一个字符串来自数据库的值。

这是我在数据库中的 table。

Table 页

-----------------------------------------------------
| id | author |      title     | content   | status |
-----------------------------------------------------
| 1  |   1    | page one title | page text |    1   |
-----------------------------------------------------
| 2  |   1    | page one title | page text |    2   |
-----------------------------------------------------

Table 用户

----------------------------------------------
| id | username |      email          | role |
----------------------------------------------
| 1  |   darth  | darth@deathstar.dot |   1  |
----------------------------------------------

Table page_statuses

--------------------------
| id |    name   | value |
--------------------------
| 1  | Published |   1   |
--------------------------
| 2  |   Draft   |   2   |
--------------------------
| 3  |  Review   |   3   |
--------------------------

所以页面 table 的作者和状态字段是 tables 用户和 table page_statuses 的外键。

页面的作者和状态这两个字段都是整数和无符号的,也是索引。当我检查 phpmyadmin 中的关系时,我在 table:

页上得到了这个
----------------------------------------------------------------------
| Column |    Foreign key constraint (INNODB) |         Keyname          |
----------------------------------------------------------------------
| author |       `laravell`.`users`.`id`      |   pages_author_foreign   |
----------------------------------------------------------------------
| status | `laravell`.`page_statuses`.`value` | pages_status_foreign     |
----------------------------------------------------------------------

当我在我的页面 table 的作者和状态字段中输入数据库中的一些数据时,我可以单击数字,它将引导我找到正确的数据(在 phpmyadmin 中)。例如,如果我点击作者编号,它会将我重定向到用户 table 并显示该作者所在的行,这样就可以了。

现在我已经设置好了模型

models/
   Page.php
   PageStatus.php
   User.php

最后我需要设置关系。 在 Page.php 下我有

public function author() {
    return $this->belongsTo('User', 'author', 'id');
}

public function pagestatus() {
    return $this->belongsTo('PageStatus', 'status', 'value');
}

所以一切都设置正确,一切都应该正常工作,但有些事情却没有。

当我死掉并转储作者时 returns 只是一个字符串,而 pagestatus returns 和该行的数组。输出是

----------------------------------------------
| author |                status             |
----------------------------------------------
|    1   | {"id":2,"name":"Draft","value":2} |
----------------------------------------------

所以状态 returns 正确而作者不 returns 正确。

不能将关系命名为与外键列相同的名称!

更改任何一个都应该有效,但我建议您将外键列更改为 author_id。然后你也不需要在你的关系中指定外键列,因为你使用的是常规名称。