Use relaciones HasMany existentes como HasOne en Laravel

Use relaciones HasMany existentes como HasOne en Laravel — Amit Merchant — Un blog sobre PHP, JavaScript y más

A HasMany La relación en Laravel te ayuda a definir una relación de uno a muchos entre dos modelos. Así que si tienes un User modelo y un Post modelo, puede definir un HasMany relación entre ellos de esa manera.

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use App\Models\Post;

class User extends Model
{
    public function posts(): HasMany
    {
        return $this->hasMany(Post::class);
    }
}

Y si quieres establecer una relación directa entre el User Y Post plantillas, puede utilizar el HasOne relación. Así que puedes establecer un HasOne relación entre el User Y Post para recuperar la publicación más popular de un usuario usando el ofMany() método como este.

public function popularPost(): HasOne
{
    return $this->hasOne(Post::class)->ofMany('votes', 'max');
}

Pero en la última versión de Laravel…

Ahora puede convertir una existente HasMany relación en un HasOne relación convenientemente encadenando las noticias one() método en el HasMany relación.

Así que si tuviéramos que usar el HasMany relación definida anteriormente, se puede convertir en una HasOne relación así.

public function popularPost(): HasOne
{
    return $this->posts()->one()->ofMany('votes', 'max');
}

La ventaja de usar el one() es que no tiene que repetir la misma configuración de clave externa en los métodos de relación si define la clave externa en el HasMany método relacional.

¡DX de Laravel para la victoria!

Si quieres conocer otros artículos parecidos a Use relaciones HasMany existentes como HasOne en Laravel puedes visitar la categoría Código.

Deja un comentario

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

Subir

Esta página web utiliza cookies para analizar de forma anónima y estadística el uso que haces de la web, mejorar los contenidos y tu experiencia de navegación. Para más información accede a la Política de Cookies . Ver mas