Автоматически устанавливать временные метки в таблице полиморфных отношений.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Автоматически устанавливать временные метки в таблице полиморфных отношений.

Сообщение Anonymous »

У меня есть модель ProductLandedCost с отношением morphToMany к различным другим моделям: Warehouse, например:
class Warehouse extends Model
{
// ...

public function productLandedCosts(): MorphToMany
{
return $this->morphToMany(
ProductLandedCost::class,
'product_landed_costable'
);
}
}

Полиморфные отношения опосредуются таблицей product_landed_costables. В этой таблице я хочу записать некоторые метаданные о каждой связи, поэтому столбцов в ней на несколько больше, чем в типичной полиморфной таблице, включая временные метки (updated_at и созданный_at). Таблица определяется этой миграцией:
public function up(): void
{
Schema::create('product_landed_costables', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->unsignedBigInteger("product_landed_cost_id");
$table->string("product_landed_costable_type", 255);
$table->unsignedBigInteger("product_landed_costable_id");
$table->foreign('product_landed_cost_id')
->references('id')
->on('product_landed_costs');
$table->string("source", 255);
$table->string("action", 255);
});
}

Итак, когда я прикрепляю ProductLandedCost к складу, я делаю что-то вроде этого:
$warehouse->productLandedCosts()->save($product_landed_cost, [
"action" => "action",
"source" => "source",
]);

Это правильно добавит запись в мою таблицу Product_landed_costables. Однако он не заполняет столбцы меток времени (created_at и update_at) — для них установлено значение null. То же самое верно, если я использую Attach() вместо save().
Есть ли способ проинструктировать Eloquent автоматически устанавливать эти временные метки в этой ситуации?
Этот вопрос и этот вопрос похожи на мои, но они оба стремятся поместить временные метки в таблицу связанной модели, тогда как я хотел бы поместить их в саму полиморфную таблицу.
Я понимаю, что могу добавить временные метки вручную (как показано ниже), но поскольку в большинстве других ситуаций Eloquent добавляет их автоматически, мне интересно, не упускаю ли я что-то здесь.
$now = Carbon::now();
$warehouse->productLandedCosts()->save(
$product_landed_cost,
[
"action" => "action",
"source" => "source"
"created_at" => $now,
"updated_at" => $now
]
);


Подробнее здесь: https://stackoverflow.com/questions/798 ... tion-table
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»