Saltar al contenido

obteniendo el valor de una columna de tabla dinámica adicional laravel

Solución:

Cuando se utilizan relaciones Many to Many con Eloquent, el modelo resultante obtiene automáticamente una pivot atributo asignado. A través de ese atributo, puede acceder a las columnas de la tabla dinámica. Aunque por defecto solo existen las claves en el objeto pivote. Para incluir sus columnas allí también, debe especificarlas al definir la relación:

return $this->belongsToMany('Role')->withPivot('foo', 'bar');

Documentos oficiales

Si necesitas más ayuda en la tarea de configurar las relaciones con Eloquent, házmelo saber.

Editar

Para consultar el precio haz esto

$model->problems()->where('phone_problem', $problem->id)->first()->pivot->price

Para obtener datos de la tabla dinámica:

$price = $model->problems()->findOrFail($problem->id, ['phone_problem'])->pivot->price;

O si tienes muchos discos con precio diferente:

$price = $model->problems()->where('phone_problem', $problem->id)->firstOrFail()->pivot->price;

Además.

Para actualizar datos en el pivote puede ir NUEVA MANERA:

$model->problems()->sync([$problemId => [ 'price' => $newPrice] ], false); 

Donde el segundo parámetro se establece en falso, lo que significa que no separa todos los demás modelos relacionados.

O ir vieja forma

$model->problems()->updateExistingPivot($problemId, ['price' => $newPrice]);

Y te recuerdo:

Para Eliminar:

$model->problems()->detach($problemId);

Para crear nuevo:

$model->problems()->attach($problemId, ['price' => 22]);

Se ha probado y se ha demostrado que funciona en Laravel 5.1 Leer más.

Laravel 5.8 ~

Si desea crear un modelo de pivote personalizado, puede hacer esto:

Account.php

<?php

namespace App;

use IlluminateDatabaseEloquentModel;

class Account extends Model
{
    public function users()
    {
        return $this->belongsToMany(User::class)
            ->using(AccountUserPivot::class)
            ->withPivot(
                'status',
                'status_updated_at',
                'status_updated_by',
                'role'
            );
    }
}

AccountUserPivot.php

<?php

namespace App;

use IlluminateDatabaseEloquentRelationsPivot;

class AccountUserPivot extends Pivot
{
    protected $appends = [
        'status_updated_by_nice',
    ];

    public function getStatusUpdatedByNiceAttribute()
    {
        $user = User::find($this->status_updated_by);

        if (!$user) return 'n/a';

        return $user->name;
    }
}

En el ejemplo anterior, Account es tu modelo normal, y tienes $account->users que tiene el account_user unir tabla con columnas estándar account_id y user_id.

Si crea un modelo de pivote personalizado, puede agregar atributos y mutadores en las columnas de la relación. En el ejemplo anterior, una vez que crea el modelo AccountUserPivot, le indica a su modelo de Cuenta que lo use a través de ->using(AccountUserPivot::class).

Luego puede acceder a todo lo que se muestra en las otras respuestas aquí, pero también puede acceder al atributo de ejemplo a través de $account->user[0]->pivot->status_updated_by_nice (asumiendo que status_updated_by es una clave externa a un ID en la tabla de usuarios).

Para obtener más documentos, consulte https://laravel.com/docs/5.8/eloquent-relationships (y recomiendo presionar CTRL + F y buscar “pivote”)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *