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 CompanyUserAsí 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 el id y user_id de compantUser.

    Nota: Sea cual sea tu primary key para companyUser - asegúrate de seleccionarlo también. (En este caso se supone que id)

    Una vez que recuperes la colección, user_id estará bajo companyUser para cada uno CompanyUserProduct

    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ón addSelect 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 columna user_id de la tabla company_user que está relacionada con CompanyUserProduct.

    De esta manera, al recuperar $companyUsers, obtendrás todas las entidades de CompanyUserProduct con la columna adicional user_id del modelo CompanyUser.

    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 columna user_id además de las columnas predeterminadas. Puedes acceder a esta columna adicional utilizando el método pluck() 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