Php 拉威尔4:哈斯曼尼思。如何使用where访问元素?
我想得到去年一位作者创作的章节 因此,我有一个作者、书和章节模型 我通过hasManyThrough关系进入章节,在我的作者模型中,这种关系如下:Php 拉威尔4:哈斯曼尼思。如何使用where访问元素?,php,laravel,Php,Laravel,我想得到去年一位作者创作的章节 因此,我有一个作者、书和章节模型 我通过hasManyThrough关系进入章节,在我的作者模型中,这种关系如下: public function chapters() { return $this->hasManyThrough('Chapter', 'Book'); } $chapters = $author->chapters; 一切都很好,因为现在我可以做这样的事情:$authors->chapters 但我想从一位作者那里得到去年
public function chapters() {
return $this->hasManyThrough('Chapter', 'Book');
}
$chapters = $author->chapters;
一切都很好,因为现在我可以做这样的事情:$authors->chapters
但我想从一位作者那里得到去年创作的每一章:
$chapter[$i] = $author->chapters()->where('created_at', '>', Carbon::now()->subdays(365));
问题是,它不是从章节中得到“created_at”,而是从作者那里得到“created_at”
如果我尝试这样的方法:
public function chapters() {
return $this->hasManyThrough('Chapter', 'Book');
}
$chapters = $author->chapters;
然后尝试:
$chapter = $chapters->where('created_at', '>', Carbon::now()->subdays(365));
我得到的信息是:“不能在非对象上使用Where”之类的
如果您能帮助我们查阅去年的章节,我们将不胜感激。提前谢谢
当我在这篇文章中读到的时候,我有一种感觉,如果没有雄辩的口才,这是不可能的。我可能错了:
编辑:
以下是我的所有型号、控制器和迁移:
试试看
$chapters = $author->chapters();
然后
echo '<pre>';
dd($chapters->where('created_at', '>', Carbon::now()->subdays(365))->get());
另一个解决方案是使用约束来加载关系(建议缓解N+1查询问题)
对不起,我刚删除了我的答案
withTimestamps()
只能在hasMany()
或belongtomany()
relations.Thx上调用。我仍然得到一个错误,声明“完整性约束冲突:1052”。进一步的研究表明,我正在调用一个列名,该列名也出现在其他表中,因此我必须指定该表。不确定,如果这是正确的,因为我不知道在使用“where”方法BTW时如何指定表名。我在我的OP中的编辑中添加了所有我的控制器、模型和迁移替换在章节中创建的在中创建的在中创建的方法它应该已经在读取章节的创建值了,不是吗?