gpt4 book ai didi

php - Laravel 模型函数内的联合

转载 作者:行者123 更新时间:2023-11-29 19:01:45 25 4
gpt4 key购买 nike

您好,我是新来的,不是以英语为母语的人,所以请原谅我的语法和问题格式上的任何错误。

我正在使用 laravel 框架 5.4 版本使用 php 构建一个应用程序。该网络应用程序非常简单,用于查看文章和发布文章的用户。

我想了解如何合并模型中函数的结果。我希望用户模型中的 allReviews 函数返回用户与他的文章按创建时间排序的评论混合的评论。

让我更好地解释一下。

这是我的 3 个主要表格:

Users     | Articles  | Reviews
--------- | --------- | ---------
id | id | id
name | user_id | reviewable_id
email | title | reviewable_type
password | body | reviewtext
etc.. | etc.. | created_time

这是我的模型代码:

class User extends Model{

protected $table = 'users';

public function articles()
{
return $this->hasMany(Article::class,'user_id');
}

public function reviews(){
return $this->morphMany(Review::class,'reviewable');
}

public function allReviews(){
/*
i want union something like this:

$result = $this->reviews() union
foreach ($this->Articles() as $Article) {
union $Article->reviews();
}
orderby created_time ASC or DESC doesn't matter

return $result
*/
}
}

class Article extends Model{

protected $table = 'articles';

public function user()
{
return $this->belongsTo(User::class,'user_id');
}

public function reviews(){
return $this->morphMany(Review::class,'reviewable');
}
}

class Review extends Model{

protected $table = 'reviews';

public function reviewable(){
return $this->morphTo('reviewable');
}
}

所以我的问题是如何执行用户的 allReviews 功能?

感谢任何帮助:)谢谢您

最佳答案

调用 $user->reviews 属性将返回所有可审阅的模型。您不必联合任何东西,Eloquent 会为您处理好。

试试这个:

public function allReviews(){
$reviews = new \Illuminate\Database\Eloquent\Collection;

foreach($this->articles as $article)
{
$reviews = $reviews->merge($article->reviews);
}

$reviews = $reviews->merge($this->reviews);

return $reviews;
}

我现在真的很累,我有一种感觉,你可能会在这里遇到 N+1 查询问题情况,但它应该适合你。

关于php - Laravel 模型函数内的联合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43826064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com