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
。然后你也不需要在你的关系中指定外键列,因为你使用的是常规名称。
我不明白我有两个设置相同的外键和两个 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
。然后你也不需要在你的关系中指定外键列,因为你使用的是常规名称。