Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

132
Views
Cómo establecer una relación Uno a Muchos en UN modelo entre diferentes tipos

Tengo una tabla llamada categories y aquí está su estructura:

 id bigint(20) AUTO_INCREMENT name varchar(255) description varchar(255) short_name varchar(255) picture varchar(255) parent_category int(11) category_type tinyint(4)

Entonces, cada categoría tiene un tipo de category_type que puede ser uno de estos valores:

1 : Categoría principal

2 : Categoría superior

3 : Categoría Secundaria

4 : Subcategoría secundaria

Ahora quería establecer una relación de uno a muchos entre estas categorías.

Por ejemplo: una categoría principal tiene muchas categorías superiores y una categoría superior está relacionada con una categoría principal.

Y esto se aplicará al resto de ellos también.

Pero debido a que solo tengo un Modelo que es Category , no sé cómo aplicar esta relación, así que si lo sabe, por favor ayúdeme...

Category.php de modelo.php:

 class Category extends Model { use HasFactory; protected $fillable = ['name','short_name','description','picture','category_type','parent_category']; }
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Puede escribir las siguientes relaciones en el modelo Categoría:

 public function parentCategory() { return $this->belongsTo(Category::class, 'parent_category', 'id'); } public function childCategories() { return $this->hasMany(Category::class, 'parent_category', 'id'); }

Más tarde puede buscar las relaciones, por ejemplo, así:

 $cat = Category::where('category_type', 'main')->first(); $cat->childCategories; //all the categories where the main category has been set as parent category

O

 $cat2 = Category::where('category_type', 'secondary')->first(); $cat2->parentCategory; //the category object which has been marked as parent for that specific secondary category

Si desea filtrar por tipo de categoría en las relaciones, también puede hacerlo:

 public function superiorChildCategories() { return $this->hasMany(Category::class,'parent_category','id')->where('category_type','superior'); }

Usar:

 $cat3 = Category::where('category_type', 'main')->first(); $cat3->superiorChildCategories; //all the superior type categories where the main category has been set as parent category, will return null if there is no superior type child categories

No olvide establecer también la relación de tipo principal real en la base de datos, por lo que la columna parent_category debe ser la identificación de la categoría principal.

También está probado y funciona como se esperaba.

over 4 years ago · Santiago Trujillo Report

0

Como sé, las relaciones de Laravel funcionan entre modelos y no dentro de un modelo. Le recomendaría usar modelos separados (y tablas separadas).

Si todas las demás categorías están en el mismo nivel y todas pertenecen a una categoría principal, puede crear un modelo para la categoría principal y todos los demás pueden tener un modelo.

over 4 years ago · Santiago Trujillo Report

0

public function parent_category() { return $this->hasMany(Category::class,'parent_category','id'); }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!