with tablas relacionadas obtener modelos modelo estructura espaƱol ejemplo delete datos belongsto php laravel model eloquent laravel-5.1

php - modelos - obtener datos de tablas relacionadas laravel



Obtenga modelos de Laravel con todos los atributos (2)

¿Hay alguna manera de recuperar un modelo en Laravel con todos los atributos, incluso si son nulos? Parece que solo devuelve un modelo con los atributos que no son nulos.

La razón para esto es que tengo una función que actualizará los atributos del modelo de una matriz, si los atributos existen en el modelo. Uso la función property_exists () para verificar el modelo si tiene un atributo en particular antes de configurarlo. Se espera que la clave de matriz y el atributo de modelo coincidan, de modo que así es como funciona.

Funciona bien si el modelo ya tiene los atributos establecidos, porque el atributo existe y toma el valor de la matriz. Pero nada se actualizará o establecerá si el atributo era previamente nulo, porque falla la comprobación de property_exists ().

Lo que finalmente está sucediendo es que tengo una única matriz de atributos, y quizás dos modelos. Y ejecuto mi función setter, pasando la matriz de atributos y cada uno de los objetos en llamadas separadas. Si el modelo tiene una propiedad coincidente, se actualiza.


Aquí hay dos maneras de hacer esto. Un método es definir valores de atributo predeterminados en su modelo.

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

Luego, puede usar el método getAttributes() para obtener los atributos del modelo.

Sin embargo, si no desea establecer atributos predeterminados, escribí un método rápido que debería funcionar.

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; }

Básicamente, si el atributo no se ha establecido, esto agregará un valor nulo a ese atributo y se lo devolverá como una matriz.


Actualizar:

Si intentas hacer esto después de crear instancias de esta manera:

$model = new Model;

entonces por favor difiere a la respuesta de Thomas Kim.

De lo contrario: podría usar el toArray() o getArributes() en la instancia del modelo, que devolvería todos los atributos, incluidos los valores nulos. Entonces puedes usar array_key_exists para verificar.

Al igual que:

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