如何在Resource类中正确使用关系数据

时间:2020-09-10 14:18:26

标签: laravel

任何人都可以帮助我获得不良答复。非常感谢您的帮助。谢谢。 这是我的新闻模型

<?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()));
            })->join('newsletter_schedule_timings', 'newsletter_schedule_timings.newsletter_id', '=', 'newsletters.id')
            ->select(
                'newsletter_schedule_timings.schedule_time as st_time')
            ->where('schedule_time', '!=',NULL)
            ->orderBy('schedule_time', 'asc')->limit(1);
    }


}

这是我的通讯模型

<?php

namespace Modules\Newsletter\Entities;

use Illuminate\Database\Eloquent\Model;

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

    protected $fillable = [];

    public function newsSentOn() {
        return $this->belongsToMany(News::class,'news_newsletters','newsletter_id','news_id');
    }

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


}

这是我的资源数组 公共函数toArray($ request){

    $core =$this->core=NewsService::getInstance()->getCore();
    $path                     = $this->media_url;
    return [
        'news_id'                 => $this->id,
        'title'                   => $this->title,
        'header'                  => $this->header,
        'description'             => $this->description,
        'status'                  => $this->status,
        'media_type'              =>$this-> media_type,
        'media_thumbnail'         => $this->media_thumbnail,
        'review_id'               => $this->id,
        'media_url'               => $this->media_type == 2 ? $this->media_url : $core->getS3Parameter($path), // here 2 is for stock images
        'newsletter'              => $this->newsLetterSentOn,
    ];
}

这是控制器方法

public function getNewsByStatus($status){ // get all news of a given status
        if($status == 'validated'){

            return  News::with('newsLetterSentOn')->where('status','=','validated')
                ->orWhere('status','=','sent')->first();
        }else{
            return  News::where('status',$status)->get();

        }
    }

这是我得到的答复

{
    "data": {
        "news_id": 181,
        "title": "apple",
        "header": "Todays Headlinegg",
        "description": "Corona Virus spreds Globaly",
        "status": "sent",
        "media_type": 1,
        "media_thumbnail": null,
        "review_id": 181,
        "media_url": null,
        "newsletter": [
            {
                "st_time": "2019-04-08 20:15:00"
            }
        ]
    },
    "status": true

我想得到类似的回复-

{
            "news_id": 181,
            "title": "apple",
            "header": "Todays Headlinegg",
            "description": "Corona Virus spreds Globaly",
            "status": "sent",
            "media_type": 1,
            "media_thumbnail": null,
            "review_id": 181,
            "media_url": null,
            "review_reaction": [],
            "newsletter": "2019-04-08 20:15:00",         
        },

任何人都可以帮助我获得上述答复。非常感谢您的帮助。谢谢。

0 个答案:

没有答案