Laravel Eloquent: неверное ключевое имя для отношения модели - PullRequest
0 голосов
/ 07 сентября 2018

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

Таким образом, есть модель, где я получил проблему в App \ Models \ Rate:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Rate extends Model
{

    use SoftDeletes;
    protected $dates = ['deleted_at'];
    protected $table = 'rates';

    protected $fillable = [
        'institution_id',
        'name',
    ];

    protected $info = [
        'relations' => [
            'rateRistournes' => [
                'model' => 'RateRistourne',
                'type' => 'hasMany',
            ],
            'rateRows' => [
                'model' => 'RateRow',
                'type' => 'hasMany',
            ],
            'rateTables' => [ 
                'model' => 'RateTable',
                'type' => 'hasMany',
            ],
        ],
        'rules' => [
        ],
        'hashid' => false,
    ];

    public function getRelations()
    {
        return $this->info['relations'];
    }

    public function getRules()
    {
        return $this->info['rules'];
    }

    public function useHashid()
    {
        return $this->info['hashid'];
    }

    public function institution()
    {
        return $this->belongsTo(Institution::class);
    }

    public function rateTables()
    {
        return $this->hasMany(RateTable::class);
    }

    public function rateRows()
    {
        return $this->hasMany(RateRow::class);
    }

    public function rateRistournes()
    {
        return $this->hasMany(RateRistourne::class);
    }
}

И это функция, которая содержит запрос в ModelsController:

public function show($name, $id)
{
    $data = $this->retrieveModelAndRelations($name, $id);

    if (is_null($data)) {
        return $this->sendError('Model not found.');
    }

    return $this->sendResponse($data->toArray(), 'Model retrieved successfully.');
}


private function retrieveModelAndRelations($name, $id)
{
    $modelName = 'App\Models\\'.$name;
    $model = new $modelName;

    if ($id === 'null') {
        ...
    } else {
        $data = $modelName::when(isset($model->getRelations()['customer']), function($query) {
                            return $query->with('customer');
                        })...
                        })->when(isset($model->getRelations()['rateTables']), function($query) {
                            return $query->with(array('rateTables' => function($q) {
                                $q->orderBy('cashStart', 'ASC');
                            }));
                        })->when(isset($model->getRelations()['rateRows']), function($query) {
                            return $query->with(array('rateRows' => function($q) {
                                $q->orderBy('rate', 'ASC');
                            }));
                        })->when(isset($model->getRelations()['rateRistournes']), function($query) {
                            return $query->with(array('rateRistournes' => function($q) {
                                $q->orderBy('ristourne', 'ASC');
                            }));
                        })->find($id);
    }

    return $data;
}

И в консоль выводится результат:

created_at:(...)
deleted_at:(...)
id:(...)
institution_id:(...)
name:(...)
rate_ristournes:Array(1)
rate_rows:Array(1)
rate_tables:Array(1)

3 последняя строка должна быть:

rateRistournes:Array(1)
rateRows:Array(1)
rateTables:Array(1)

Есть ли способ заставить laravel сохранить ключ отношения, как я его написал? Что-то под капотом меняет название, и я не знаю, как это обойти.

1 Ответ

0 голосов
/ 07 сентября 2018

Изменение $snakeAttributes:

class Rate extends Model
{
    public static $snakeAttributes = false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...