it-swarm.com.de

Erhalten Laravel Modelle mit allen Attributen

Gibt es eine Möglichkeit, ein Modell in Laravel mit allen Attributen abzurufen, auch wenn diese null sind? Es scheint nur ein Modell mit den Attributen zurückzugeben, die nicht null sind.

Der Grund dafür ist, dass ich eine Funktion habe, die die Modellattribute aus einem Array aktualisiert, wenn die Attribute im Modell vorhanden sind. Ich verwende die property_exists () -Funktion, um das Modell zu überprüfen, ob es ein bestimmtes Attribut hat, bevor es festgelegt wird. Es wird erwartet, dass der Array-Schlüssel und das Modellattribut übereinstimmen. So funktioniert es. 

Dies funktioniert problemlos, wenn für das Modell bereits die Attribute festgelegt sind, da das Attribut vorhanden ist und den Wert aus dem Array bezieht. Es wird jedoch nichts aktualisiert oder gesetzt, wenn das Attribut zuvor einen Nullwert hatte, da die Prüfung property_exists () fehlschlägt.

Was letztendlich passiert ist, dass ich ein einzelnes Array von Attributen habe und dann vielleicht zwei Modelle. Ich führe meine Setter-Funktion aus und übergebe das Attribut-Array und jedes Objekt in separaten Aufrufen. Wenn das Modell über eine übereinstimmende Eigenschaft verfügt, wird es aktualisiert.

13
kenshin9

Hier sind zwei Möglichkeiten, dies zu tun. Eine Methode ist die Definition von Standardattributwerten in Ihrem Modell.

protected $attributes = ['column1' => null, 'column2' => 2];

Anschließend können Sie die getAttributes()-Methode verwenden, um die Attribute des Modells abzurufen.

Wenn Sie jedoch keine Standardattribute festlegen möchten, habe ich eine schnelle Methode geschrieben, die funktionieren sollte.

public function getAllAttributes()
{
    $columns = $this->getFillable();
    // Another option is to get all columns for the table like so:
    // $columns = \Schema::getColumnListing($this->table);
    // but it's safer to just get the fillable fields

    $attributes = $this->getAttributes();

    foreach ($columns as $column)
    {
        if (!array_key_exists($column, $attributes))
        {
            $attributes[$column] = null;
        }
    }
    return $attributes;
}

Wenn das Attribut nicht festgelegt wurde, wird im Wesentlichen ein Nullwert an dieses Attribut angehängt und an Sie als Array zurückgegeben.

14
Thomas Kim
$model->getAttributes();

Oben wird ein Array von Rohattributen zurückgegeben (wie in der Datenbanktabelle gespeichert).

$model->toArray() 

Oben werden alle rohen, mutierten (wenn verwendet) und angefügten Attribute des Modells zurückgegeben

Hoffe es wird hilfreich sein !!

5
Mahesh Yadav

Was wäre, wenn Sie alle Felder, die Sie zurücksenden möchten, explizit angeben würden.

public function getSomeModelFromArray(Request $request)
{
    // This will only give back the columns/attributes that have data.
    // NULL values will be omitted doing it this way.
    //$model = $request->all();

    // However by declaring all the attributes I want I can get back 
    // columns even if the value is null. Additional filtering can be 
    // added on if you still want/need to massage the data.
    $model = $request->all([
        'id',
        'attr1',
        'attr2',
        'attr3',
        //...
    ]);

    //...

    return $model;
}

Ziemlich allgemeines Beispiel, aber hoffentlich findet jemand das nützlich.

0
Anovative

Update:

Wenn Sie versuchen, dies nach einer Instantiierung zu tun:

$model = new Model;

dann unterscheiden Sie sich bitte von Thomas Kims Antwort.

Andernfalls: Sie können die toArray()- oder getArributes()-Methode für die Modellinstanz verwenden, die alle Attribute einschließlich der Nullen zurückgibt. Dann können Sie array_key_exists zur Überprüfung verwenden.

So wie:

if (array_key_exists('foo', $model->getAttributes())) {
    $model->foo = 'new value';
}
0
tam5