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

时间:2015-01-30 19:45:17

标签: mysql database laravel relational-database belongs-to

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

以下是我在数据库中的表格。

表格页

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

表用户

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

表page_statuses

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

因此,pages表中的author和status字段是表users和table page_statuses的外键。

来自页面的字段,作者和状态都是整数和无符号,以及索引。当我在phpmyadmin中检查关系时,我会在页面表上看到这个:

----------------------------------------------------------------------
| Column |    Foreign key constraint (INNODB) |         Keyname          |
----------------------------------------------------------------------
| author |       `laravell`.`users`.`id`      |   pages_author_foreign   |
----------------------------------------------------------------------
| status | `laravell`.`page_statuses`.`value` | pages_status_foreign     |
----------------------------------------------------------------------

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

现在我已经设置了模型

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');
}

所以一切都正确,一切都应该有效,但事情并非如此。

当我死去的时候转储作者只返回一个字符串,而pagestatus返回该行的数组。输出是

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

所以状态返回正确,作者没有返回正确的。

1 个答案:

答案 0 :(得分:1)

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

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