【问题标题】:Laravel Foreign Key 'Trying to get property of non-object'Laravel外键'试图获取非对象的属性'
【发布时间】:2015-05-22 01:48:23
【问题描述】:

我根本无法把我的头绕在模特身上。

我有两张桌子,userscompanies。用户包含一个名为Company 的列,它是companies 表的外键。 company 表有两列,IDcompany_name users 下的Company 的值引用了Companies 中的id。

我正在尝试像这样通过外键获取 company_name 的值。

$user = User::find(1)->company->company_name;

我的想法可能是错误的,这是(取决于模型是否正确)应该获取 Company 列的值,然后使用该值从 Companies 表中获取 company_name。

我的模型看起来像这样

用户

public function company() {
    return $this->belongsTo('App\Company', 'company');
}

公司

protected $table = 'companies';
public function user() {
    return $this->hasOne('App\User');
}

我不断得到的是Trying to get property of non-object

我可以在错误日志中看到它实际上也在获取公司名称!

Trying to get property of non-object', 'C:\wamp\www\laravel\app\Http\Controllers\HomeController.php', '41', array('userid' => '1', 'usercompany' => '1', 'company' => 'BMW')) 

但我不明白 pullyig useridusercompany 来自哪里。

我做错了什么?

【问题讨论】:

    标签: eloquent laravel-5


    【解决方案1】:

    在这种情况下,您尝试获取非对象的属性,这意味着 User::find(1)company 不是对象。在提供的错误消息中,看起来两者之一是一个数组。

    查看您的基础数据库表。通常,id 是未在结果对象中返回的受保护字段。 usercompany 看起来像连接字段以交叉引用两个表(即外键)。

    【讨论】:

    • 我尝试更改外键以查看该日志中是否有任何更改,并且两个连接的值保持不变。看到它可以看到我想要抓住的东西,这有点令人沮丧。 Laravel 错误消息没有帮助。
    • 我会运行以下命令,看看它打印出的类型:var_dump(User::find(1))。这将是很多数据,但它会告诉你company 是什么,是数组还是对象。
    • 它告诉我 'company' => int 1. 作为数组的一部分 protected 'attributes' => 和 protected 'original' =>
    • 这就是你的问题。 company 不是对象。在您的 company() 函数中,仔细检查基础表中的列是否为小写 company 而不是 Company
    • 数据库表本身肯定是小写的,所以我不确定发生了什么。
    猜你喜欢
    • 2015-09-22
    • 2017-03-20
    • 2014-03-25
    • 2015-01-25
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多