2016-09-26 2 views
0

У меня есть таблица с заказами, как:Laravel новое значение столбца по умолчанию значение created_at

Заказать

id 
created_at 
shipped_at 
billed_at 

shipped_at находится на упаковочном листе и billed_at на полях invoice.The shipped_at и Недавно добавлено billed_at.

Когда я создаю заказ, иногда я хочу дать дате created_at пользовательскую дату, если заказ на будущее (я знаю, что это была оригинальная идея созданного_ада). Я хочу, чтобы значение created_at копировалось в shipped_at и billed_at при создании, потому что иногда я использую настраиваемое значение для created_at. Я не могу использовать текущее время.

Я могу создать заказ в 5 разных местах, поэтому было бы неплохо, если бы я мог просто создать одну функцию, чтобы скопировать эти значения вместо вызова той же функции из 5 мест, где я создаю заказ.

Есть ли умное место в структуре laravel, чтобы скопировать значение created_at в shipped_at?

мысли: Normaly Я думаю, это событие как сохранение было бы лучше, но created_at создан после сохранения, можно обновить/сохранить в сохраненном случае или будет это создать петлю INFINIT из экономия?

+2

Вы пытались использовать событие 'created'? Это должно срабатывать после создания, тогда как 'creation' находится во время. – aynber

ответ

0

Благодаря aynber комментарий использовать созданное событие, я придумал следующее решение:

в командной строке

php artisan make:provider OrderDatesProvider 

для создания нового поставщика. В организации:

<?php 

namespace App\Providers; 

use App\Order; 
use Illuminate\Support\ServiceProvider; 

class OrderDatesProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap the application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 

     Order::created(function($order){ 
      $order->shipped_at = $order->created_at; 
      $order->billed_at = $order->created_at; 
      $order->save(); 
     }); 

    } 

    /** 
    * Register the application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     // 
    } 
} 
Смежные вопросы