Как вернуть модель из множества полиморфных c ассоциаций в Laravel - PullRequest
0 голосов
/ 11 июля 2020

Я могу успешно создать отношения, но теперь я хочу определить, какая модель используется в отношениях, но я не знаю, как получить к ней доступ. Может ли кто-нибудь указать мне правильное направление? Я пробовал следующее ниже в файле index.blade. php, но он просто возвращает NULL

1 Возможное решение - проверить, является ли значение пустым для каждого определение отношений каждый раз, но есть ли laravel встроенный способ проверки?

@if ($event->services->isNotEmpty())
  There are services!
@endif

В основном у меня есть два курса и услуги, определенные отношениями. Я хочу проверить, какой из них соответствует каждое событие.

У меня есть следующие отношения:

services
courses
events
schedulables
event_user

События. php модель

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Event extends Model
{
    public function user()
    {
        return $this->belongsTo('App\User');
    }

    public function users()
    {
        return $this->belongsToMany('App\User');
    }

    public function courses()
    {
        return $this->morphedByMany('App\Course', 'schedulable');
    }

    public function services()
    {
        return $this->morphedByMany('App\Service', 'schedulable');
    }
}

index.blade. php

<table class="table table-striped">
                        <thead>
                            <tr>
                                <th scope="col">Start</th>
                                <th scope="col">End</th>
                                <th scope="col">Assigned</th>
                                <th scope="col">Type</th>
                                <th scope="col">Options</th>
                            </tr>
                        </thead>
                        <tbody>
                            @foreach ($events as $event)
                            <tr>
                                <th scope="row">{{$event->start_date}}</th>
                                <td>{{$event->end_date}}</td>
                                <td>{{$event->user->name}}</td>
                                <td>{{Illuminate\Database\Eloquent\Relations\Relation::getMorphedModel($event->getMorphClass())}}
                                </td>
                                <td>
                                    <form action="{{route('events.destroy', $event)}}" method="POST">
                                        @csrf
                                        @method('DELETE')
                                        <button type="submit" class="btn btn-outline-danger">Delete</button>
                                    </form>
                                </td>
                            </tr>
                            @endforeach
                        </tbody>
                    </table>

1 Ответ

0 голосов
/ 11 июля 2020

Согласно документации , этот фрагмент кода применяется только к модели $ service или $ course:

Illuminate\Database\Eloquent\Relations\Relation::getMorphedModel($event->getMorphClass())

Вы можете просто определить настраиваемый атрибут типа внутри модели события :

use Illuminate\Database\Eloquent\Relations\Relation;

class Event
{
    public function getTypeAttribute()
    {
        return class_basename($this->schedulable_type);
    }
}

Затем в файле лезвия вы можете просто сказать:

<td>{{$event->type}}</td>
...