Laravel многие ко многим

196
21 марта 2018, 05:57

Есть три таблицы в БД. Связь многие ко многим

Модели

Sample.php

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

Service.php

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

Если бы я хотел добавить записи в таблицу sample_service через модель Sample, то я бы написал так

public function sync_services(int $sample_id, Request $request)
{
    $sample=Sample::findOrFail($sample_id);
    $sample->services()->sync($request->input('service_ids', []));
    return $sample->services;
}

Т.е. передал бы массив с идентификаторами сервисов, которые хотел бы добавить. И всё бы ничего, если бы мне не нужно было добавить повторяющиеся сервисы. Т.е. всё работает, если sync([1,2,3]), но мне нужно sync([1,2,2,3,3,3,3]). Мне важно, чтобы в таблице sample_service было именно так - без столбца quantity и т.п., поскольку каждый отдельный сервис с таблице sample_service будет иметь статусы - время закрытия, например. Далее нужно будет обновлять некоторые поля таблицы sample_service. Так что, я подозреваю, придётся, наверное, заводить третью модель SampleService

class SampleService extends Model
{
    public function Sample()
    {
        return $this->belongsTo('App\Sample');
    }
    public function Service()
    {
        return $this->belongsTo('App\Service');
    }
}

А в граничащих моделях добавить

public function sampleService()
{
    return $this->hasMany('App\SampleService');
}
public function sampleService()
{
    return $this->belongsToMany('App\SampleService');
}

Однако при таком подходе не могу получить данные из sample_service непосредственно в tinker:

$sample = App\Sample::first();
$sample->sampleService;

Получаю ожидаемую ошибку - у меня нет таблицы sample_services. У меня название в единственном числе - sample_service

Illuminate\Database\QueryException with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'db7.sample_services' doesn't exist (SQL: select * from sample_services where sample_services.sample_id = 1 and sample_services.sample_id is not null)'

Пробую в модели Sample.php в связи указать таблицу, но это не имеет эффекта и приводит к той же ошибке. Что не так и как быть?

public function sampleService()
{
    return $this->belongsToMany('App\SampleService', 'sample_service');
}

Как это сделать в laravel 5.6?

READ ALSO
Не работает фильтрация по полям Wordpress

Не работает фильтрация по полям Wordpress

Есть сайт где должна производится фильтрация по определенным полям (площадь дома, его этажность, материалы)Изначально все работало хорошо,...

182
Internal Excation [Call to undefined function mb_convert_encoding ()]

Internal Excation [Call to undefined function mb_convert_encoding ()]

При запуске приложения с консоли выдает следующую ошибку

663
Как подключить оператора при общении с ботом Telegram

Как подключить оператора при общении с ботом Telegram

ЗдравствуйтеИспользую пакет на Laravel 5

137
Как короче записать цикл от 0 до 100?

Как короче записать цикл от 0 до 100?

Если учитывать пробелы, то минимум, что получилось у меня:

221