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!