【问题标题】:Laravel 4 Eloquent RelationshipLaravel 4 雄辩的关系
【发布时间】:2015-06-01 13:11:38
【问题描述】:

我有 2 张桌子:

`tasks {id, task_name, status_id}`
`statuses {id, status_name }`

一个任务一次只能有一个状态,例如Pending、Active、Completed、Aborted等

这是我目前所拥有的。

class Task extends Eloquent
{
    public function status
    {
        return $this->hasOne('Status', 'id');
    }
}

当我尝试$task->status->status_name 时,出现“尝试获取非对象的属性”错误!

我的 Status 类看起来像这样

class Status extends Eloquent
{
    protected $table = 'statuses';
}

你能解释我为什么会出现这个错误吗?

【问题讨论】:

  • 您有太多未连接的 sn-ps 代码无法正确回答此问题,但正如错误所述,您访问的属性不正确。例如,经常用 eloquent 将事物声明为静态,因此您需要使用 :: 而不是 ->
  • “您有太多未连接的 sn-ps 代码无法正确回答此问题”是什么意思?另外,我认为更改为静态函数不会改变任何事情!
  • 更好的代码格式和改进最终问题
  • 例如,虽然很明显 $task 代表您的 eloquent 模型,但模型实例化(或未实例化)的方式会影响您访问它的方式。无论如何,我也不是 laravel 专家,但这正是为什么你填补一些空白会帮助我们帮助你:) 只是我的 2 美分。

标签: php laravel relationship


【解决方案1】:

由于您在Task 表中获得了外键,因此您可以使用belongsTo,Eloquent 会在tasks 表中为您查找列status_id

public function status
{
 return $this->belongsTo('Status');
}

一对一部分了解更多信息http://laravel.com/docs/4.2/eloquent

对于错误Trying to get a property of non object 请确保在非常记录的表tasks 上的列status_id 中有一个值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 2014-07-26
    • 2020-09-25
    • 2018-07-24
    • 1970-01-01
    • 2015-03-14
    相关资源
    最近更新 更多