2015-11-09 3 views
2

Редактировать: Поэтому я изменил название своего вопроса. это было: встроено ли временная метка для миграции пользователей, отличная от других миграций, которые мы создаем в Laravel?Как изменить тип даты углерода на строку?

Хорошо, вот что. У Laravel из коробки была миграция пользователей. поэтому я не создал никаких. и мне нужна таблица счетов-фактур, поэтому я сделал миграцию для этого. Вот два:

class CreateUsersTable extends Migration 
{ 
/** 
* Run the migrations. 
* 
* @return void 
*/ 
public function up() 
{ 
    Schema::create('users', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->string('email')->unique(); 
     $table->string('password', 60); 
     $table->rememberToken(); 
     $table->timestamps(); 
    }); 
} 

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::drop('users'); 
} 
} 

счетов-фактур Миграция:

class CreateInvoicesTable extends Migration 
{ 

public function up() 
{ 
    Schema::create('invoices', function (Blueprint $table) { 
     $table->unsignedInteger('id')->unique(); 
     $table->unsignedInteger('user_id')->index(); 
     $table->longText('url'); 
     $table->timestamps(); 

     $table->foreign('user_id')->references('id')->on('users'); 
    }); 
} 

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::drop('invoices'); 
} 
} 

Я положил некоторые начальные данные там. теперь, когда я vardump created_at для каждого из них, я получаю разные результаты! Я просто проверял, как показано ниже, и результаты:

foreach ($users as $user) 
    { 
     return var_dump($user->created_at); 
    } 

Результат:

object(Carbon\Carbon)#185 (3) { ["date"]=> string(19) "2015-11-08 14:50:29" ["timezone_type"]=> int(3) ["timezone"]=> string(11) "Asia/Tehran" } 

Но для счетов-фактур:

foreach ($invoices as $invoice) 
    { 
     return var_dump($invoice->created_at); 

    } 

Я получаю это:

string(19) "2015-11-09 11:15:55" 

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

Любая помощь будет оценена по достоинству. Большое спасибо.

+0

Посмотрите на ваши модели, и посмотреть, что различия есть там –

+0

@MarkBaker кроме некоторых заполняемого, защищенного и скрытого определения переменного я не вижу никаких других отличий. –

+0

https: // laracasts.com/series/laravel-5-основы/эпизоды/11 – sandeepsure

ответ

1

Если вы хотите переписать объекты Laravel Carbon, напишите следующую функцию в своей модели, которую вы хотите перезаписать.

public function getDates() { 
    return array(); 
} 

Это говорит Laravel каких даты вы хотите вернуть в качестве объектов углерода (нет), таким образом, они все вышли, как DateStrings

Надеется, что это помогает - но делать заметки, это будет влиять на каждую дату в течение модель. Если вы хотите иметь определенные даты рассматриваются как объект Carbon, добавьте их в массив как

array('created_at', 'updated_at') т.д.

Doc http://laravel.com/docs/4.2/eloquent#date-mutators

Извиняюсь, это выше для 4.2

В 5.1 Вас можно просто написать атрибут $dates и дать ему пустой массив

protected $dates = []

документов http://laravel.com/docs/5.1/eloquent-mutators#date-mutators

+0

Спасибо, человек. Я на этом. Я добавил, но все же это не влияет на новые, которые я создаю. но я думаю, что это то, что мне нужно. Я добавил 'protected $ dates = []' в мою модель User, но у новых пользователей все еще есть дата экземпляра углерода. но я уверен, что это проблема с моей стороны. –

+0

Иногда модели получают кеширование - я не думаю, что это сработает, но стоит того. Попробуйте сделать дамп php-artisan – Coderrrr

+0

Еще раз спасибо, но нах, это не я, я все еще получаю даты углерода. –