Запишите общее отношение в одном месте в laravel и расширьте этот класс в модели, где это требуется - PullRequest
0 голосов
/ 21 июня 2020

Как мы можем использовать общие отношения в laravel, чтобы записать в один файл и расширить этот класс в модели, где нам требуются эти отношения.

Пожалуйста, взгляните на модель «Суд»:

use Illuminate\Database\Eloquent\Model;
use Astrotomic\Translatable\Translatable;
use TranslatableContract;

class Court extends Model implements TranslatableContract
{
    use Translatable;
    public $translatedAttributes = ['title', 'description'];
    public $fillable = ['court_type_id', 'state_id', 'city_id'];

    public function courtType()
    {
        return $this->belongsTo('App\CourtType', 'court_type_id');
    }

    public function state()
    {
        return $this->belongsTo('App\State');
    }

    public function city()
    {
        return $this->belongsTo('App\City');
    }
}

другая модель "CourtCase"

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Astrotomic\Translatable\Translatable;
use TranslatableContract;

class CourtCase extends Model implements TranslatableContract
{
    use Translatable;
    public $translatedAttributes = ['case_id', 'title', 'description'];
    public $fillable = ['court_id', 'state_id', 'city_id'];

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

    public function images()
    {
        return $this->morphMany('App\Image', 'imageable');
    }

    public function state()
    {
        return $this->belongsTo('App\State');
    }

    public function city()
    {
        return $this->belongsTo('App\City');
    }
}

Здесь, в приведенных выше моделях, у нас есть два отношения, названные как city, состояние, которые являются общими для каждой модели, которые допускают повторение кода, так как мы можем их написать отношения в одном файле и расширить его в конкретной модели.

1 Ответ

0 голосов
/ 21 июня 2020

Создайте новую базу пользовательской модели, которая расширяет класс модели по умолчанию:

namespace App;
use Illuminate\Database\Eloquent\Model;

class CustomModelBase extends Model {

public function find() {
   // Your custom find functionality goes here.
 }

  // etc
 }

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

namespace App;

class Post extends CustomModelBase {
}
...