Albert Reis da Cruz
Criador Albert Reis da Cruz 10/01/2022

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:

if (!$user->sheets->last()) {

            $data['in'] = $date;                
            $data['status'] = "1";
            $user->sheets()->create($data);

        } else {

            foreach ($user->sheets->last() as $sheet) {
                if ($sheet['status'] == "1") {
                    $data['rest_out'] = $date;
                    $data['status'] = "2";
                    $user->sheets()->update($data);

                } else if ($sheet['status'] == "2") {
                    $data['rest_in'] = $date;
                    $data['status'] = "3";
                    $user->sheets()->update($data);

                } else if ($sheet['status'] == "3") {
                    $data['out'] = $date;
                    $data['status'] = "4";
                    $user->sheets()->update($data);

                } else if ($sheet['status'] == "4") {
                    $data['in'] = $date;                // registra entrada do funcionário.
                    $data['status'] = "1";
                    $user->sheets()->create($data);

                }

            }
Manager Carlos Ferreira 10/01/2022

Olá, Albert!
Tudo bem?

Poderia recuperar com first:
$sheet = $user->sheets->orderBy('id', 'DESC')->first();

Carlos Ferreira
Criador Albert Reis da Cruz 10/01/2022

Não foi.

BadMethodCallException

Method Illuminate\Database\Eloquent\Collection::orderBy does not exist.
 
Albert Reis da Cruz
Manager Carlos Ferreira 10/01/2022

Desculpa, faltou o (): $sheet = $user->sheets()->orderBy('id', 'DESC')->first();

Carlos Ferreira
Criador Albert Reis da Cruz 10/01/2022

fiz assim: $sheet = DB:table('sheets')->where('usr_id', $id)->orderBy('id', 'DESC')-first();

tem alguma diferença?

 

Albert Reis da Cruz
Criador Albert Reis da Cruz 10/01/2022

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?

 

Albert Reis da Cruz
Manager Carlos Ferreira 10/01/2022

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

Carlos Ferreira
Criador Albert Reis da Cruz 10/01/2022

Obrigado!

Albert Reis da Cruz
Criador Albert Reis da Cruz 10/01/2022

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.

Albert Reis da Cruz
Manager Carlos Ferreira 10/01/2022

Como está o seu código atualmente? E onde você travou?
Mostra aí que te dou uma força! =D

Carlos Ferreira
Criador Albert Reis da Cruz 10/01/2022
 
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $users = $this->repository->with('sheets')->where('role_id', '<>', '2')->paginate();

        // dd($users);

        return view('admin.pages.users.index', compact('users'));
    }
Albert Reis da Cruz
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!