Есть три таблицы в БД. Связь многие ко многим
Модели
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?
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть сайт где должна производится фильтрация по определенным полям (площадь дома, его этажность, материалы)Изначально все работало хорошо,...
При запуске приложения с консоли выдает следующую ошибку
Если учитывать пробелы, то минимум, что получилось у меня: