如何在其他模型的另一个关系内使用关系?

时间:2020-09-16 13:04:48

标签: laravel

我想使用public function scheduleTime()来检查新闻模型的newsLetterSentOn()中的sechudle_time。 如果可以做到这一点,请帮助我。谢谢。

这是新闻模型

<?php

namespace Modules\Newsletter\Entities;
use Brexis\LaravelWorkflow\Traits\WorkflowTrait;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;

/**
 * This is for storing  news
 * Class News
 * @package Modules\Newsletter\Entities
 */
class News extends Model {

    use WorkflowTrait;
    protected $table = 'news_info';
    protected $fillable = [
        'title', 'header', 'description', 'status', 'created_by', 'media_url', 'media_thumbnail', 'media_type'
    ];

    public function newsLetterSentOn() {
        return $this->belongsToMany(Newsletter::class,'news_newsletters','news_id','newsletter_id')
            ->whereHas('scheduleTime', function($q){
                $q->where('schedule_time', '<', date("Y-m-d h:i:s", time()));
            });
    } 
}

这是通讯模型

<?php

namespace Modules\Newsletter\Entities;

use Illuminate\Database\Eloquent\Model;

class Newsletter extends Model
{
    protected $table = 'newsletters';
    protected $hidden = ['pivot'];

    protected $fillable = [];
    public function scheduleTime()
    {
        return $this->belongsTo(ScheduleTime::class,'id','newsletter_id');
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用点符号来嵌套关系,如下所示:

$news = News::with(['newsLetterSentOn.scheduleTime' => function($q)
   $q->where('schedule_time', '<', date("Y-m-d h:i:s", time()));
])->find($id);

然后,您可以像通常一样通过$news访问它。

$news->newsLetterSenton->scheduleTime;