with updateorcreate meaning español delete collection php orm laravel eloquent

php - updateorcreate - Obtenga columnas específicas usando la función "con()" en Laravel Eloquent



updateorcreate laravel (8)

Tengo dos tablas. El User y el Post One User tienen muchas posts y una post pertenece a un solo user .

En mi Modelo de User tengo hasMany relación como

public function post(){ return $this->hasmany(''post''); }

Y en mi modelo de post , tengo relación con belongsTo como

public function user(){ return $this->belongsTo(''user''); }

Ahora quiero unirme a estas dos tablas usando Eloquent with() pero quiero columnas específicas de la segunda tabla. Sé que puedo usar el query Builder pero no quiero usar eso. Cuando en el modelo post escribo

public function getAllPosts() { return Post::with(''user'')->get(); }

Se ejecuta siguiendo queires

select * from `posts` select * from `users` where `users`.`id` in (<1>, <2>)

Pero yo quiero

select * from `posts` select id,username from `users` where `users`.`id` in (<1>, <2>)

Cuando uso

Post::with(''user'')->get(array(''columns''....));

Solo devuelve la columna de la primera tabla. Quiero columnas específicas usando with() de la segunda tabla. ¿Cómo puedo hacer eso?


Ahora puede usar el método de pluck en una instancia de Collection :

Esto devolverá solo el atributo uuid del Post model

App/Models/User::find(2)->posts->pluck(''uuid'') => Illuminate/Support/Collection {#983 all: [ "1", "2", "3", ], }


Bueno, encontré la solución. Se puede hacer uno pasando una función de closure with() como segundo índice de matriz como

Post::with(array(''user''=>function($query){ $query->select(''id'',''username''); }))->get();

Solo seleccionará el id y el username de username de otra tabla. Espero que esto ayude a otros.

Recuerde que la clave principal (id en este caso) es necesaria en $ query-> select () para recuperar realmente los resultados necesarios.


Cuando va por el otro camino (hasMany):

User::with(array(''post''=>function($query){ $query->select(''id'',''user_id''); }))->get();

No olvide incluir la clave externa (suponiendo que sea user_id en este ejemplo) para resolver la relación, de lo contrario obtendrá cero resultados para su relación.


En Laravel 5.6 puedes llamar a un campo específico como este

$users = App/Book::with(''author:id,name'')->get();


En su modelo de Post :

public function userWithName() { return $this->belongsTo(''User'')->select(array(''id'', ''first_name'', ''last_name'')); }

Ahora puedes usar $post->userWithName



Puedes hacerlo así en Laravel 5.5:

Post::with(''user:id,username'')->get();

Cuide el campo de id como se indica en los docs :

Al utilizar esta función, siempre debe incluir la columna de identificación en la lista de columnas que desea recuperar.


Tenga en cuenta que si solo necesita una columna de la tabla, usar ''listas'' es bastante agradable. En mi caso, estoy recuperando los artículos favoritos de un usuario, pero solo quiero los ID del artículo:

$favourites = $user->favourites->lists(''id'');

Devuelve una matriz de identificadores, por ejemplo:

Array ( [0] => 3 [1] => 7 [2] => 8 )