Я разрабатываю систему, в которой пользователь может подписаться на план, а также совершать платежи по отдельным пунктам. Для части подписки я использую Laravel Moll ie Касса , а для части оплаты одного элемента, которую я решил, я мог бы использовать те же таблицы, которые генерирует Cashier, которые являются orders
, order_items
и subscriptions
.
Я сделал пару моделей для t ie всех таблиц вместе. Итак, в пользовательской модели я поместил отношение hasMany
public function orders() {
return $this->hasMany(Order::class);
}
И я создал модель Orders, в которую я поместил принадлежность модели
public function user()
{
return $this->belongsTo(User::class);
}
Ошибка, которую я получаю, на самом деле действительно очевидно, потому что сгенерированная таблица orders
не имеет user_id, а вместо этого называется owner_id
(см. ниже)
Schema::create('orders', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('owner_type');
$table->unsignedBigInteger('owner_id');
$table->string('number');
$table->string('currency', 3)->nullable();
$table->integer('subtotal');
$table->integer('tax');
$table->integer('total');
$table->integer('balance_before')->default(0);
$table->integer('credit_used')->default(0);
$table->integer('total_due');
$table->string('mollie_payment_id')->nullable();
$table->string('mollie_payment_status', 16)->nullable();
$table->datetime('processed_at')->nullable();
$table->timestamps();
});
Хотя я мог бы исправить это, добавив следующую строку в схему
$table->foreign('owner_id')->references('id')->on('users');
Но это приводит к той же ошибке. Я попытался добавить ->nullable()
или ->unsigned()
в поле owner_id
, но это также дало тот же результат. Как я могу исправить эту проблему, чтобы я мог сделать простой foreach l oop, как это?
@foreach($user->orders as $order):
@endforeach
ПРИМЕЧАНИЕ: Я не могу просто изменить owner_id
, чтобы он назывался user_id
, потому что это будет Перерыв Кассир-Молл ie. Когда создается новая подписка, она вставляет идентификатор аутентификации в поле owner_id
.