HasMany não está dando certo.
Carlos, boa tarde. Vou mandar em dois tickets porque não está cabendo.
class Gestor extends Model
{
protected $fillable = ['matricula', 'nome', 'email'];
public function centrocustos()
{
return $this->HasMany(Centrocusto::class);
}
}
class GestorController extends Controller
{
private $gestor;
private $totalpage = 10;
public function __construct(Gestor $gestor)
{
$this->gestor = $gestor;
}
public function index()
{
$gestors = Gestor::All();
//dd($gestor);
$centrocustos = $gestors->centrocustos;
//dd($centrocustos);
return view('admin.cadastros.gestores.index', compact('gestors', 'centrocustos'));
}
}
A odéia é listar cada gestor com seus devidos centrolucros que pode ser vários.
A mensagem que está dando é:
"Property [centrocustos] does not exist on this collection instance."
public function index() {
$gestors = Gestor::get();
$centrocustos = $gestors->centrocustos()->get();
return view('admin.cadastros.gestores.index', compact('gestors', 'centrocustos'));
}
Mensagem: "Method Illuminate\Database\Eloquent\Collection::centrocustos does not exist."
Olá, Marcos!
Tudo bem?
Está errado a forma como usou o relacionamento de tabelas.
Só pode trazer um relacionamento direto quando tem um objeto específico, e não uma coleção.
Ex:
// Objeto específico:
$objeto = Model::find(2);
// Coleção de itens:
$items = Model::get();
No caso, pra trazer um relacionamento One to Many precisa trazer a partir de um objeto, assim:
$gestor = Gestor::find(2);
$centrocustos = $gestor->centrocustos; //ou: $gestor->centrocustos()->get();
No caso, se precisar retornar uma coleção pode fazer assim:
$gestors = Gestor::with('centrocustos')->get();
Na view, exemplo:
@foreach ($gestors as $gestor)
{{ $gestor->nome }}
Centros custos:
@foreach ($gestor->centrocustos as $centrocusto)
{{ $centrocusto->nome }}
@endforeach
@endforeach
Carlos, boa tarde. Não deu certo. Por favor, veja se pode me ajudar.
Minha model Gestor
public function centrocustos()
{
return $this->hasMany(Centrocusto::class);
}
Meu controller CentrocustoController
public function index()
{
$centrocustos = $gestor->centrocustos;
$gestors = Gestor::with('centrocustos')->get();
return view('admin.cadastros.centrocusto.index', compact('centrocustos', 'gestors'));
}
Minha Index.blade
@foreach ($gestors as $gestor)
<td>{{ $gestor->nome }}</td>
<td>{{ $gestor->matricula }}</td>
<td>{{ $gestor->email }}</td>
@foreach ($gestor->centrocustos as $centrocusto)
{{ $centrocusto->nome }}
@endforeach
@endforeach
Erro: "Undefined variable: gestor"
Parece que é aqui: $centrocustos = $gestor->centrocustos;
Meu relacionamento é um gestor para vários centro de custos.
O erro tá no método index()
Nessa linha:
$centrocustos = $gestor->centrocustos;
Você usa uma variável chamada $gestor, mas, não criou antes, por isso o erro.
Remove essa linha :)
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!