Añadiendo columna adicional al resultado de la relación en elocuente
Tengo dos modelos. Ambos son pivotes porque se unen a otras mesas. Pero también tienen una relación consigo mismos.
class CompanyUser extends Pivot
{
protected $table = 'company_user';
public function companyUserProducts() {
return $this->hasMany('App\CompanyUserProduct','company_user_id');
}
}
class CompanyUserProduct extends Pivot
{
protected $table = 'company_user_product';
public function companyUser() {
return $this->belongsTo('App\CompanyUser','company_user_id');
}
}
Quiero conseguir todas las entidades de CompanyUserProduct pero con la columna adicional user_id
desde CompanyUser
Así puedo hacerlo. pluck('user_id')
en la colección y obtener todos los IDs inmediatamente. ¿Es posible hacerlo en Elocuente, o debo usar Query Builder?
$companyUsers = CompanyUserProduct::with('companyUser')->get();
Pregunta hecha hace 3 años, 4 meses, 28 días - Por techtrailblazer
3 Respuestas:
-
Puedes hacerlo
$companyUsers = CompanyUserProduct::with('companyUser:id,user_id')->get();
Para recuperar el
CompanyUserProduct
junto con elid
yuser_id
decompantUser
.Nota: Sea cual sea tu
primary key
paracompanyUser
- asegúrate de seleccionarlo también. (En este caso se supone queid
)Una vez que recuperes la colección,
user_id
estará bajocompanyUser
para cada unoCompanyUserProduct
Así que puedes sacarlo usando notación de puntos.
eg:
$userIds = $companyUsers->pluck('companyUser.user_id');
Respondida el Dec 18, 2020 a las 15:57 - por csscraftsman
Votos positivos: 0 | Votos negativos: 0 -
Para agregar la columna adicional
user_id
al resultado de la relación en Eloquent, puedes utilizar la funciónaddSelect
de Eloquent para seleccionar la columna adicional que deseas incluir. A continuación, te muestro cómo modificar tu consulta para lograrlo:php $companyUsers = CompanyUserProduct::with('companyUser')
- >addSelect('company_user.user_id')
- >get();
Al agregar
->addSelect('company_user.user_id')
, estás seleccionando la columnauser_id
de la tablacompany_user
que está relacionada conCompanyUserProduct
.De esta manera, al recuperar
$companyUsers
, obtendrás todas las entidades deCompanyUserProduct
con la columna adicionaluser_id
del modeloCompanyUser
.Respondida el Dec 19, 2020 a las 15:58 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Sí, es posible añadir una columna adicional al resultado de la relación en Eloquent utilizando la función
with
. Aquí tienes cómo hacerlo:php $companyUsers = CompanyUserProduct::with(['companyUser' => function ($query) { $query->select('company_user.', 'user_id'); }])->get();
De esta manera, el resultado de la relación
companyUser
incluirá la columnauser_id
además de las columnas predeterminadas. Puedes acceder a esta columna adicional utilizando el métodopluck()
como hiciste anteriormente:php $userIds = $companyUsers->pluck('user_id');
Nota:* En este ejemplo, hemos utilizado un cierre anónimo para modificar la consulta de la relación
companyUser
. Esto te permite especificar qué columnas deseas seleccionar de la tabla relacionada.Respondida el Dec 19, 2020 a las 16:05 - por Gemini
Votos positivos: 0 | Votos negativos: 0