laravel modele błąd Call to undefined method Illuminate\Database\Query\Builder::t()

0

Mam taki problem dopiero zaczynam pracę z modelami w laravelu i swój model stworzyłem za pomocą takiego zapytania

php artisan make:model Statistic

Mój plik modelu wygląda tak

<?php
namespace App\Statistic;

use Illuminate\Database\Eloquent\Model;
class Statistic extends Model {

    protected $table = 'my_users';
    public function t() {
        
        
    }
}

I teraz kod kontrollera

<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Support\Facades\Validator;
use DB;
use Request;
use Hash;
use Illuminate\Http\File;

use Illuminate\Support\Facades\Storage;
use App\Http\Requests\StoreBlogPost;
use Illuminate\Database\Eloquent\Model;
use Auth;
class Controller_main  extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
    
 
    public function main() {
        $statistic = \App\Statistic::t();
 
        
        if (Auth::check()) 
        {
            print "dobrze";
        }
        else {

            return Redirect('login')->with('login_error','Nieprawidłowy login lub hasło');
        }
        
        
    }
    
    
    
}

Oba pliki są w tym samym katalogu /app/Controllers/
I teraz jak wywołuje ten kontroller to dostaje błąd.
Call to undefined method Illuminate\Database\Query\Builder::t()

0

O statycznych metodach słyszał? Jak słyszał, to jak wywołujesz swoją metodę, a jak wygląda jej sygnatura?

2

t nie jest metodą statyczną, lecz tak właśnie próbujesz ją uruchomić (poprzez ::t() zamiast ->t()).

Musisz najpierw pobrać konkretny, pojedynczy model, a dopiero potem na nim wywołać metodę, na przykład tak:

Statistic::first()->t();
0
Patryk27 napisał(a):

t nie jest metodą statyczną, lecz tak właśnie próbujesz ją uruchomić (poprzez ::t() zamiast ->t()).

Musisz najpierw pobrać konkretny, pojedynczy model, a dopiero potem na nim wywołać metodę, na przykład tak:

Statistic::first()->t();

Zrobiłem ją jako statyczną i nadal to samo A co to first oznacza ?

0

Pokaż jak zrobiłeś tą metodę statyczną, bo dam sobie rękę uciąć, że coś pomieszałeś.

RTFM:
https://laravel.com/docs/5.7/eloquent

0

Zrobiłem ją jako statyczną i nadal to samo

Wrzuć aktualny kod.

A co to first oznacza ?

NazwaModelu::first() pobiera pierwszy model z bazy danych (https://laravel.com/docs/5.7/eloquent).

0

Teraz zmieniłem i działa dobrze tylko teraz nie wiem skąd on ma tabelę statistics ja w bazie mam tabelę statistic, a nigdzie nie wpysywałem statistics wywołuje to teraz w ten sposób

$statistic = \App\Statistic::all();
i działa dobrze.

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'serwis.statistics' doesn't exist (SQL: select * from `statistics`)
1

W Laravelu domyślnie nazwa tabeli = liczba mnoga nazwy modelu.
Czyli jeśli masz model Statistic, domyślną nazwą tabeli będzie statistics; Car -> cars i tak dalej.

Jest to zresztą opisane w dokumentacji: https://laravel.com/docs/5.7/eloquent (rozdział Eloquent Model Conventions).

0

Dobrze już wszystko działa, a czy jest gdzie dokładnie opisane są modele w laravelu bo tam gdzie szukałem są słabo opisane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1