Erro de método no Laravel?

10 respostas
laravelphp
J

Erro no products() , não sei como consertar, fala que o método não existe

CategoryTableSeeder.php

class CategoryTableSeeder extends Seeder{
    public function run(){
        factory(Category::class,10)->create()->each(function($c ){
            for($i = 0; $i <= 5 ; $i++){
              $c->products()->save(factory(Product::class)->make());
            };
        });
    }
}

Category.php

public function products(){
    return $this->hasMany(Product::class);
}

Product.php

public function category(){
    return $this->belongsTo(Product::class);
}

10 Respostas

D

Não existe mesmo, porque primeiro grava Categoria, depois, cria os seus produtos, acredito que o erro em si poderia ser resolvido com uma simples cadastro, porque utilizar Seeder para popular essa tabela, qual o objetivo?

J

estou fazendo um curso ai o cara fez assim , só que n entendo muito

D

Essa parte faz um preenchimento antes de iniciar a sua aplicação, como se fosses os dados que as tabelas precisam ter após serem criadas!

Talvez falta alguma coisa que não entendeu, e eu desenvolvo em Laravel, eu uso bem pouco esse recurso.

Precisaria ver o que o curso fala!

J

tem como fazer de outro jeito?

D

Poste as duas classes Category e Product, suas migrations também deixa eu testar!

J

Product.php

<?php

namespace CodeDelivery\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model{
    protected $fillable = [
        'category_id',
        'name',
        'description',
        'price'
    ];
    public function category(){
        return $this->belongsTo(Product::class);
    }
}

Category.php

<?php

namespace CodeDelivery\Models;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $fillable = [
      'name'
    ];
    public function products(){
        return $this->hasMany(Product::class);
    }
}

CategoryTableSeeder

<?php

use CodeDelivery\Models\Category;
use CodeDelivery\Models\Product;
use Illuminate\Database\Seeder;

class CategoryTableSeeder extends Seeder{
    public function run(){
        factory(Category::class,10)->create()->each(function($c ){
            for($i = 0; $i <= 5 ; $i++){
              $c->products()->save(factory(Product::class)->make());
            };
        });
    }
}
D

Antes de mais nada:

Está assim:

$c->products()->save(factory(Product::class)->make());

troque essa linha para create

$c->products()->create(factory(Product::class)->make());

ou seja;

<?php

use CodeDelivery\Models\Category;
use CodeDelivery\Models\Product;
use Illuminate\Database\Seeder;

class CategoryTableSeeder extends Seeder{
    public function run(){
        factory(Category::class,10)->create()->each(function($c ){
            for($i = 0; $i <= 5 ; $i++){
              $c->products()->create(factory(Product::class)->make());
            };
        });
    }
}

Se não der certo me poste a imagem do erro?

J

Da esse erro:

[InvalidArgumentException]
Unable to locate factory with name [default] [CodeDelivery\Models\Category].

D
  • Você fez uma pasta para colocar o seus CodeDelivery?
  • Você registrou?

Desculpa a quantidade de pergunta, mas, no Laravel é assim!

J

ola descupe a demora coloquei no github as pasta pra vc poder ver;

Criado 22 de março de 2017
Ultima resposta 29 de mar. de 2017
Respostas 10
Participantes 2