2016-09-29 2 views
1

Ich habe Probleme beim Zugriff auf created_at und updated_at Eigenschaften in einem Laravel-Modell mit MongoDB. Mein Datumsformat in der Datenbank wie folgt:Zugriff auf created_at und aktualisierten_datum in Laravel mit Mongodb

"created_at" : { 
    "sec" : NumberInt(1475126325), 
    "usec" : NumberInt(840000) 
}, 
"updated_at" : { 
    "sec" : NumberInt(1475126325), 
    "usec" : NumberInt(840000) 
}, 

ich folgendes Ergebnis von MongoDB Abfrage erhalten:

App\Modules\Admin\Models\Segment Object 
(
    [table:protected] => tbl_segment 
    [timestamps] => 1 
    [fillable:protected] => Array 
     (
      [0] => name 
      [1] => created_at 
      [2] => updated_at 
     ) 

    [collection:protected] => 
    [primaryKey:protected] => _id 
    [parentRelation:protected] => 
    [connection:protected] => 
    [keyType:protected] => int 
    [perPage:protected] => 15 
    [incrementing] => 1 
    [attributes:protected] => Array 
     (
      [_id] => MongoDB\BSON\ObjectID Object 
       (
        [oid] => 57ecbefe15285745ba039871 
       ) 

      [created_at] => Array 
       (
        [sec] => 1475133182 
        [usec] => 832000 
       ) 

      [updated_at] => Array 
       (
        [sec] => 1475133182 
        [usec] => 832000 
       ) 

     ) 

    [original:protected] => Array 
     (
      [_id] => MongoDB\BSON\ObjectID Object 
       (
        [oid] => 57ecbefe15285745ba039871 
       ) 

      [created_at] => Array 
       (
        [sec] => 1475133182 
        [usec] => 832000 
       ) 

      [updated_at] => Array 
       (
        [sec] => 1475133182 
        [usec] => 832000 
       ) 

     ) 

    [relations:protected] => Array 
     (
     ) 

    [hidden:protected] => Array 
     (
     ) 

    [visible:protected] => Array 
     (
     ) 

    [appends:protected] => Array 
     (
     ) 

    [guarded:protected] => Array 
     (
      [0] => * 
     ) 

    [dates:protected] => Array 
     (
     ) 

    [dateFormat:protected] => 
    [casts:protected] => Array 
     (
     ) 

    [touches:protected] => Array 
     (
     ) 

    [observables:protected] => Array 
     (
     ) 

    [with:protected] => Array 
     (
     ) 

    [morphClass:protected] => 
    [exists] => 1 
    [wasRecentlyCreated] => 
) 

Wenn ich versuche, created_at Datum zuzugreifen, erhalte ich folgende Fehlermeldung:

ErrorException in Model.php line 2983: preg_match() expects parameter 2 to be string, array given

Antwort

0

Ich hatte ähnliches Problem nach der Aktualisierung Laravel-Paket (Jessengers) für Mongodb.Sie können versuchen - Finden Sie folgende Zeilen

if (preg_match('/^(\d{4})-(\d{1,2})-(\d{1,2})$/', $value)) { 

in Model.php bei gefunden vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php und ersetzen Sie es durch

if (preg_match('/^(\d{4})-(\d{1,2})-(\d{1,2})$/', $value['sec'])) { 

in vendor/nesbot/carbon/src/Carbon/Carbon.php mit createFromFormat() Funktion ersetzen -

public static function createFromFormat($format, $time, $tz = null) 
    { 
     $time = date('Y-m-d H:i:s' , $time['sec']); 

     if ($tz !== null) { 
      $dt = parent::createFromFormat($format, $time, static::safeCreateDateTimeZone($tz)); 
     } else { 
      $dt = parent::createFromFormat($format, $time); 
     } 

     if ($dt instanceof DateTime) { 
      return static::instance($dt); 
     } 

     $errors = static::getLastErrors(); 
     throw new InvalidArgumentException(implode(PHP_EOL, $errors['errors'])); 
    } 

Hinweis: - Es könnte eine bessere Lösung dafür geben, also wenn jemand anders seine Alternative gefunden hat, dann teile es bitte mit.

Verwandte Themen