Я надеюсь, что я просто что-то пропустил, но я потратил целый день, пытаясь разобраться в этом самостоятельно.Laravel Ошибка многих серверов SQL Server
Я работаю над попыткой синхронизации tags
с job
.
Я побежал dd()
, чтобы убедиться, что при отправке тегов представлены как массив, и я убедился, что мои отношения правильно подключены в laravel.
Однако, при создании новой работы с тегами (теги не работает нормально, потому что вставка на самом деле не бывает), эта ошибка возникает:
SQLSTATE[42000]: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]
Incorrect syntax near ','. (SQL: insert into [ninja_job_tag] ([job_id], [tag_id])
values (1, 1), (1, 3), (1, 5), (1, 7), (1, 8), (1, 10))
Вот присоединять код ($job
правильно создан уже):
$tagIDs = Input::get('tags') || [];
$job->tags()->attach(Input::get('tags'));
Это функция в Job.php
вызвать tags
:
public function tags()
{
return $this->belongsToMany('App\Models\Marketing\Tag','ninja_job_tag');
}
Это функция в Tag.php
назвать jobs
:
public function jobs()
{
return $this->belongsToMany('App\Models\Marketing\Job','ninja_job_tag');
}
Вот миграция для сводной таблицы:
Schema::create('ninja_job_tag', function(Blueprint $table)
{
$table->integer('job_id')->unsigned()->index();
$table->foreign('job_id')->references('id')->on('ninja_jobs')->onDelete('cascade');
$table->integer('tag_id')->unsigned()->index();
$table->foreign('tag_id')->references('id')->on('ninja_tags')->onDelete('cascade');
});
ли я с видом какой-то глупую ошибку? Заранее благодарю за любую помощь!
UPDATE
После некоторых более расследование, добавив только один тег работает. Это заставило меня взглянуть в другом направлении, и я обнаружил, что для того, чтобы вставить несколько строк в один оператор, база данных ДОЛЖНА запускаться SQL Server 2008 или новее. Это неудачно, но сервер, который мне нужно запустить, не был обновлен в течение длительного времени и работает только с SQL Server 2005 (версия 9.0).
Единственное, что я могу сейчас придумать, это использовать foreach
для прокрутки КАЖДОГО tag_id
и присоединить их отдельно. Может ли кто-нибудь подумать о альтернативном решении?
Я не знаю синтаксиса MS SQL Server, чтобы убедиться, но, я думаю, что инструкция insert, созданная laravel, является проблемой. Для одной вставки существует много пар значений. вставить в [ninja_job_tag] ([job_id], [tag_id]) значения (1, 1), (1, 3), (1, 5), (1, 7), (1, 8), (1, 10); Не могли бы вы попробовать это заявление в своей консоли SQL SQL sql? Вы настроили laravel для производства MS SQL? –
Выполнение этого в обычном SQL дает ту же ошибку. Я сузил его до одного тега, и он отлично работает. ('insert into [ninja_job_tag] ([job_id], [tag_id]) значения (1, 1);') –
Хорошо, вот в чем проблема. Lavarell производит неправильный sql. Но, извините, сегодня я впервые услышал о lavarell. Мое единственное предложение состоит в том, что вы настроили неправильный диалект в Lavarell или это просто ошибка. –