Laravel 多表子查询

Posted

技术标签:

【中文标题】Laravel 多表子查询【英文标题】:Laravel Multiple Table Subquery 【发布时间】:2021-06-26 13:46:54 【问题描述】:

我正在使用 Laravel 6.0 我有 4 张不同的桌子。

表格:

post_category

id relation_post_id post_type category_id

photo_post

id title image created_at

text_post

id title content created_at

video_post

id title video_source_url created_at

我想列出 post_category 表中两个日期范围内的帖子。例如

PostCategory::whereBetween('created_at',[$from, $to])->get();

结果应该是:

结果

https://i.ibb.co/y53PmJ9/image.png

我该怎么做?

型号: 邮政分类

class PostCategory extends Model

use SoftDeletes;
protected $table = 'post_category';
public $timestamps = true;

protected $fillable = [
    'relation_post_id',
    'post_type', // 1: text, 2: photo, 3: video
    'category_id',


];

public function text()

    return $this->belongsTo('App\TextPost','relation_post_id','id');

public function photo()

    return $this->belongsTo('App\PhotoPost','relation_post_id','id');

public function video()

    return $this->belongsTo('App\VideoPost','relation_post_id','id');

文字发布

class TextPost extends Model

use SoftDeletes;
protected $table = 'text_post';
public $timestamps = true;

protected $fillable = [
    'title',
    'content',
];

照片发布

class PhotoPost extends Model

use SoftDeletes;
protected $table = 'photo_post';
public $timestamps = true;

protected $fillable = [
    'title',
    'image',

];

视频发布

class VideoPost extends Model

use SoftDeletes;
protected $table = 'video_post';
public $timestamps = true;

protected $fillable = [
    'title',
    'video_source_url',

];

【问题讨论】:

能否提供您目前拥有的 Eloquent 模型的代码? 好的,我更新了问题,谢谢 啊,好吧。很基本。您拥有它的方式会使拥有所有这些模型的数组变得很麻烦。您必须分别过滤它们,然后合并它们。考虑使用下面提到的多态关系,因为您的示例似乎几乎注定了这种情况,并且会使您的编程生活更轻松。 【参考方案1】:

当然,这是可能的。但是因为我们只知道你的数据库设计而不知道你的代码库,所以很难说。直觉上我会选择polymorphic relationship。

【讨论】:

以上是关于Laravel 多表子查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 子查询 派生表子查询错误

连接两个表子查询

mysql子查询

MySQL------ 子查询

MySQL------ 子查询

MySQL随记 - 子查询