dúvida sobre collection
Possuo um relacionamento entre user e sheets (1:n), preciso pegar o último registro, estou fazendo desta forma: $user->sheets->last();
agora preciso editar um valor desta collection e não consigo.
meu código:
Olá, Albert!
Tudo bem?
Poderia recuperar com first:
$sheet = $user->sheets->orderBy('id', 'DESC')->first();
Não foi.
BadMethodCallException
Desculpa, faltou o (): $sheet = $user->sheets()->orderBy('id', 'DESC')->first();
fiz assim: $sheet = DB:table('sheets')->where('usr_id', $id)->orderBy('id', 'DESC')-first();
tem alguma diferença?
Agora tem como fazer desta forma?
$users= $this->repository-where('role_id', '2')->paginate();
e juntar com essa?
$sheet = $user->sheets()->orderBy('id', 'DESC')->first();
trazer todos os usuários e a ultima sheet de cada um?
Quando usa a facade DB está usando o Query Builder, e quando usa o Model está usando o Eloquent (que usa o query builder por baixo dos panos) - a vantagem do Eloquent é que ele é super poderoso, tem recursos que facilitam demais.
---
Já sobre a sua segunda pergunta, você consegue unificar elas em uma única consulta, uma das formas é usar ao máximo so recursos de relacionamentos de tabelas que o Eloquent dispõe.
Recomendo que assista este curso: https://academy.especializati.com.br/curso/laravel-banco-de-dados-relacional
Obrigado!
Carlos, olá, tudo blz?
Assisti sua recomendação. Agregou muito!
No entanto não consegui solucionar o problema, inclusive verfiquei a documentação oficial tb.
gostaria de um "empurraozinho", rsrs
vou utilizar ela no método index.
Gratidão.
Como está o seu código atualmente? E onde você travou?
Mostra aí que te dou uma força! =D
No seu método with você pode passar um array, e aplicar filtros nos itens relacionados, exemplos
Sem filtros:
$users = $this->repository
->with(['sheets', 'outro_relacionamento'])
->paginate();
// Filtrando os relacionamentos
$filter = '12';
$users = $this->repository
->with(['sheets' => function ($query) use ($filter) {
$query->where('colunaA', '!=', $filter);
})
->paginate();
Na dúvida da query final, instale o Telescope, ou mesmo troque o paginate() por toSql()
bom dia, onde fecho o colchete no exemplo onde filtra os relacionamentos? Ele foi aberto antes do 'sheets'.
Está dando um erro.
fiz assim:
$users = User::with(['sheets' => function ($query) {
$query->where('status', '4');
}])->toSql();
dd($users);
e recebi isso:
"select * from `users`"
este exemplo acima tirei da documentação oficial.
Usa o Telescope, porque ele vai te dar uma visão full da query: https://academy.especializati.com.br/aula/instalar-telescope-e-debugbar
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!