【问题标题】:Laravel Eloquent belongsTo relationship is not workingLaravel Eloquent belongsTo 关系不起作用
【发布时间】:2017-02-13 07:17:31
【问题描述】:

我正在尝试使用 Eloquent belongsTo 在两个表之间创建关系,但它似乎不起作用。

两张表分别是文档和部门,每个文档属于一个部门。

文件

id INT
department INT

部门

id INT
name varchar(255)

这是定义关系的函数

public function department(){
    // department: foreign key
    // id : departments table primary key
    return $this->belongsTo('\App\Department' , 'department' , 'id');
}

这是访问函数

public function getDepartmentAttribute(){
    return $this->department()->first()->name;
}

它返回以下错误消息:Undefined property: App\AjaxSearch::$department

【问题讨论】:

  • 你确定 $this 是 Document 模型吗?
  • 你从哪里调用这个 getDepartmentAttribute()?
  • 来自一个名为 AjaxSearch 的模型,它使用文档表。
  • 你能把\App\Department前面的斜线去掉,得到App\Department吗?我宁愿您不要使用引号,而只需输入Department::class,这样您就可以避免输入错误的部门模型路径,因为这会自然地影响到班级。
  • 不幸的是这并没有影响任何东西,仍然得到同样的错误

标签: php sql database laravel eloquent


【解决方案1】:

在文档表中添加

department_id INT Foreign

在您的文档迁移中

$table->integer('department')->unsigned();

同时编辑关系

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

更新

好的,根据你的更新,你可以得到这样的部门名称

$doc = Document::find(1);
$name = $doc->department->name;

【讨论】:

  • 我也编辑了关系,但它返回了Trying to get property of non-object错误
  • 如果有帮助,请检查我的更新。否则,我会尝试 agian。
  • 仍然返回同样的错误Trying to get property of non-object
  • 然后尝试检查部门是否存在。 dd($doc->department);
【解决方案2】:

需要检查相关记录是否存在

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

$document 是您当前的文档记录。

$name = (empty($document->department->id) === false) ? ($document->department->name) : ''; 

【讨论】:

    猜你喜欢
    • 2016-07-25
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2018-08-06
    • 2015-12-22
    • 2015-04-19
    • 2019-02-15
    • 1970-01-01
    相关资源
    最近更新 更多