Po wprowadzeniu danych w database.php jeszcze fajnie ogarnąć plik .env w root directory i tam też wprowadzić dane.
Migrate problem
https://laravel-news.com/laravel-5-4-key-too-long-error
Automatyczny prefix tabel
//in config/database
'prefix' => env('DB_TABLE_PREFIX', 'abc')
//in env
DB_TABLE_PREFIX=abc
Tworzenie nowej tabeli
php artisan make:migration nazwa_klasy_tworzącej --create="nazwaNowejTabeli"
Zabezpieczanie klasy (umożliwianie wprowadzania kilku wybranych pól jednocześnie)
nazwa tej funkcji musi być „fillable”
class Video extends Model
{
protected $fillable = [
'title',
'url',
];
}
Wyciąganie wszystkich obiektów z bazy
Video::latest()->get();
Wyciąganie wyfiltrowanych rzeczy z bazy
Video::find($id); (albo findOrFail zamiast find - wtedy przy braku takiego id, będzie 404 zamiast 500)
Rozszerzanie query (query scopes) – przejdź do modelu
Zliczanie zapytań idących do bazy danych
np w controllerze najpierw trzeba umieścić możliwość logowania, później można przypisać log do zmiennej i wyrzucić. Enable umieścić na początku a odczytanie query loga na końcu
use Illuminate\Support\Facades\DB; DB::connection()->enableQueryLog(); $queries = DB::getQueryLog(); dd($queries);
Wyciąganie elementów np z wielu podkategorii z użyciem pivot table
tutaj wyciągamy relację images
$array = array(19,20);
$obj = Images_category::with('images')->whereIn('id', $array)->get();
to pobierze 2 obiekty z id 19 i 20 wraz z ich obrazkami, które lecą po pivocie
Pobieranie modelu (bądź kolekcji modeli) z warunkiem pivota
(w tym przypadku images_categories to relacja). $categoriesIdArray nie jest konieczne. W ten sposób po prostu przekazuje się do funkcji zmienne.
$posts = Image::whereHas('images_categories', function ($query) use ($categoriesIdArray) {
$query->whereIn('id', $categoriesIdArray);
})->latest()->get();
Pobieranie elementów z wieloma kategoriami/tagami jednocześnie
czyli np pobieramy wpisy, które mają tagi pumpkin oraz fall jednocześnie
$posts = Post::whereHas('tags', function($q) use ($tags)
{
$q->whereIn('id', $tags);
}, '=', count($tags))->get();
Paginacja
$images = Image::latest()->paginate(20);
//oraz w widoku
{{ $images->links() }}
żeby mieć nad paginacją większą kontrolę, możesz opublikować vendor (co opublikuje Ci pliki do resources/views/vendor
php artisan vendor:publish --tag=laravel-pagination
więcej w dokumentacji o paginacji
Paginacja z atrybutami w url-u
domyślnie linki w paginacji pominą atrybuty w url-u. Trzeba dodać coś takiego:
najpierw w controllerze używamy inputa
use Illuminate\Support\Facades\Input;
następnie w funkcji wrzucamy nową zmienną i przekazujemy ją do widoku
$additional = Input::except('page');
a w widoku paginację wyświetlamy tak
{{ $results->appends($additional)->links('vendor.pagination.bootstrap-4') }}
Czyste zapytania sql
Żeby wszystko było bezpieczne, trzeba zmienną przekazać w drugim parametrze funkcji select
$someVariable = Input::get("some_variable");
$results = DB::select( DB::raw("SELECT * FROM some_table WHERE some_col = :somevariable"), array(
'somevariable' => $someVariable,
));