Laravel关系返回NULL

时间:2017-08-31 13:25:12

标签: php laravel eloquent laravel-5.4 laravel-eloquent

我试图通过laravel Eloquement模型获得关系。我有两个模型,分别是Books.php和Magazine.php

在Books.php中

我有

public function magazines()
{
    return $this->hasMany('App\BOOKS', 'id', 'id');
}

然后我会尝试归还所有与书籍相关的杂志

$books = Book::find(123);
$magazines = $books->magazines()->get();
return $magazines;

但我有NULL杂志!当我添加

$magazines = $books->magazines()->toSql();

我看到这个选择:选择*来自"杂志"其中"杂志"。" ID"是空的"杂志"。" ID"不是空的 - 它是什么?为什么laravel model put"为null且不为null"?

注意,如果我改变

public function magazines()
{
    return $this->belongsToo('App\BOOKS', 'id', 'id');
}

选择将是这样的:选择*来自"杂志"其中"杂志"。" ID"为空 任何人都知道,这是什么?

2 个答案:

答案 0 :(得分:1)

您的代码中存在几个问题:

  • HasMany将相关模型类作为第一个参数,因此在您的情况下传递App\Book毫无意义。假设您的杂志模型被称为App\Magazine
  • ,您应该通过Magazine
  • 您没有对HasMany关系说magazines表上的外键名称。

那应该做的工作

public function magazines()
{
    return $this->hasMany('App\Magazine', 'book_id', 'id');
}

恕我直言,我建议你在发布之前阅读Laravel文档,有很多例子可以向你解释如何使用关系和数据库表。看看One to Many关系。

修改

您可以省略关系中的->get(),只需抓取您的杂志

即可
$magazines = $books->magazines;

答案 1 :(得分:0)

你应该试试这个:

请更改并尝试:

public function magazines()
{
    return $this->hasMany('App\MAGAZINE');
}