Я работаю в особых отношениях с laravel, где у меня есть статьи и совместимые статьи.Одна статья может иметь много совместимых статей, и в то же время совместимая статья имеет своего родителя как совместимого.
Статья A совместима с B, поэтому B совместима с A.
Для достижениядля этого я создал отношение «один ко многим», в котором у меня есть две таблицы:
статей и совместимых элементов
Столбцы articles
:
$table->bigIncrements('id');
$table->string('code', 20)->unique();
Хотя compatibles
столбцы таблицы:
$table->bigIncrements('id');
$table->unsignedBigInteger('primary_id');
$table->string('primary_code', 20);
$table->unsignedBigInteger('secondary_id');
$table->string('secondary_code', 20);
Чтобы создать статью, мне нужно сохранить данные два раза, правым и обратным образом, таким образом, при назначении статьи, совместимой, эта статья присваивается как совместимая с первойone:
$articulo = Articulo::findOrFail($request->get('id'));
foreach ($data['compatibles'] as $value) {
$secundario = Article::select('id')->where('code',trim($value['compatible']))->first();
$secondary_id = $secondary->id;
$primary_id = $article->id;
$article->compatibles()->createMany([
[
'primary_id' => $primary_id,
'primary_code' => trim($value['codigo']),
'secondary_id' => $secondary_id,
'secondary_code' => trim($value['compatible']),
],
// inverse
[
'primary_id' => $secondary_id, // secondary_id on primary_id place, but insert sentence doesn't respect this.
'primary_code' => trim($value['compatible']),
'secondary_id' => $primary_id, // primary_id at secondary_id place
'secondary_code' => trim($value['code']),
]
]
);
}
Первый реестр отлично сохранен, но его обратный код повторяет primary_id
вместо того, чтобы вместо этого сохранить virtual_id.
Если я выполняю print_r
для отладки, массивыпоказывает правильно, но по некоторым причинам, которые я не могу понять, он не вставляет те же данные.
На всякий случай, я вставляю свои модели
class Compatible extends Model
{
protected $connection = 'stock';
protected $fillable = ['primary_id', 'primary_code', 'secondary_id', 'secondary_code'];
public function article()
{
return $this->belongsTo('App\Article');
}
}
class Article extends Model
{
public function compatibles()
{
return $this->hasMany('App\Compatible', 'primary_id');
}
}
У меня естьсказать, что весь этот процесс исключаетиспользуется в транзакции БД.Я относительно новичок в Laravel и не знаю, будет ли это мешать чему-либо.