2017-08-31 129 views
-1

我试图通过laravel Eloquement模型来获得关系。我有两个机型的前Books.php和Magazine.phpLaravel关系返回NULL

在Books.php我有

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

然后我试图返回所有的杂志,这与书籍有关

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

但我有空杂志!当我加入

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

我我看到这个选择:。SELECT * FROM“杂志”这里“杂志”,“ID”为空和“杂志”,“ID”不为空 - 什么是吗?为什么laravel模型把“是空的而不是空的”?

通知,如果我改变

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

选择会是这样的:SELECT * FROM “杂志” 这里 “杂志”, “ID” 为空 任何人都知道,这是什么?

+1

节目表结构的书籍表 –

+1

我不认为你们的关系是有道理的。为什么一本书有很多书?不应该有一本书属于许多杂志? – GiamPy

+0

我想象你在关系中引用的类不存在。尝试将您在'hasMany'中引用的类从'App \ BOOKS'改为'App \ Book'。 –

回答

0

你应该试试这个:

请改变和尝试

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

希望这对你的工作

+0

不,我有不同的foreign_key和primary_id –

+0

@KonstantinMokhov请详细提供 –

0

有几个问题在你的代码:

  • 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; 
+0

这个模型laravel自动生成项目 –

+0

当我改变模型类,表名称改变,但“不是null和null”仍然在查询 –

+0

自动生成的方法只是存根,您总是要修改它以反映正确的DB结构。你是否改变了'hasMany'方法,把你的外键作为第二个参数,把你的本地键作为第一个参数? – Desh901