php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan config:clear
composer dump-autoload
php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan config:clear
composer dump-autoload
Örnek çalışma aşağıdadır.
<?php use App\Models\Category; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; use Faker\Factory as Faker; use Illuminate\Support\Str; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { // DB::table('categories')->truncate(); bunun yerine model kullanabiliriz Category::truncate(); $faker = Faker::create(); for($i=0; $i<30; $i++) { $category_name = rtrim($faker->sentence(1), '.'); Category::create([ 'name' => $category_name, 'slug' => Str::slug($category_name) ]); } // } } } ?>
CategoriesTableSeeder isimli class yapısıyla beraber seed işlemi yapmak için örnek komut satırı:
php artisan db:seed --class=CategoriesTableSeeder
Laravel 8 ile DatabaseSeeder kullanabilmek için daha önce Factory oluşturmak gerekiyor bunu yaptığınızı varsayıyorum. (Laravel 8 Factory Oluşturmak)
Örnek Seeder yapısı
<?php namespace Database\Seeders; use App\Models\Product; use App\Models\User; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { // \App\Models\User::factory(10)->create(); User::factory()->count(100)->create(); Product::factory()->count(100)->create(); } }
rastgele 100 kullanıcı oluşturmak ve veritabanına kaydetmek için:
factory(User::class, 100)->create();
rastgele 100 ürün oluşturmak ve kaydetmek için
Product::factory()->count(100)->create();
Çalıştırmak için terminalden:
php artisan db:seed
Sorunsuz bir şekilde OrnekController isimli bir controller oluşturduktan sonra route tanımlaması aşağıdaki gibi yapılması uygun olacaktır.
Route::resource('/products','App\Http\Controllers\OrnekController');
Eski sürümlerde yapılan tanımlama ise şöyleydi:
Route::resource('/products','OrnekController');
Bu şekilde yapacağınız tanımlar laravel 8 ve sonrasında sorun oluşturabilir.
Öncelikle Product isminde Model oluşturmanız gerekiyor isimler birebir aynı olursa hata almaycaksınız komut satırında vereceğim komutlar Laravel 8’e göredir.
ProductFactory adında factory oluşturmak için:
php artisan make:factory ProductFactory
Oluşan dosyanız database->factories içinde yer alan ProductFactory.php şeklinde olacaktır. Örnek içerik:
<?php namespace Database\Factories; use Illuminate\Database\Eloquent\Factories\Factory; use Illuminate\Support\Str; class ProductFactory extends Factory { /** * Define the model's default state. * * @return array */ public function definition() { $product_name = $this->faker->sentence(3); return [ 'name' => $product_name, 'slug' => Str::slug($product_name), 'description' => $this->faker->paragraph(5) , 'price' => mt_rand(10,100) / 10 ]; } }
Okumaya devam et Laravel 8 Tinker Terminal ile Product factory oluşturmak
Mysqle root ile bağlantı kurmak
mysql -u root
UTF8 formatında Veritabanı oluşturmak:
CREATE DATABASE laravel_api CHARACTER SET utf8 COLLATE utf8_general_ci;
İşlem yapmak üzere İlgili veritabanını seçmek
USE DATABASEADI
Migrate dosyalarını çalıştırmak için
php artisan migrate
Yeni Migrate oluşturmak için
php artisan make:migration create_products_table --create=products
Çalıştırılan Son Migrate işlemini geri almak için
php artisan migrate:ROLLBACK
Çalıştırılan TÜM Migrate işlemini geri almak için
php artisan migrate:reset
Hem reset Hem de migrate işlemini tek seferde yapmak için
php artisan migrate:refresh
Bütün tabloları silmek için
php artisan migrate:fresh
Migrate işleminde ilgili alanı Boş kalabilir yapmak için
$table->text('ornekalan')->NULLABLE();
Laravelde DB sınıfına ait hazır metodları kullanmak için
php artisan tinker
Tinker terminalden kayıt eklemek için
DB::INSERT('insert into tabloadi (sutun1, sutun2, sutun3) values (?, ?, ?), ['aciklama 1 ', 'aciklama 2', 'aciklama 3'] ');
Tinker terminalden kayıtları listelemek için
DB::SELECT('select * from products');
Tablodaki verileri listelemenin diğer yolu:
DB::TABLE('urunler')->GET();
Tablodaki tek bir kaydı çekmek için
>>> DB::TABLE('urunler')->WHERE('kolonadi','icerik1')->GET()
Tablodaki verilerden tek bir şarta göre veri çekmek için
Örn: fiyatı 10 üzerinde olanları listelemek:
DB::TABLE('urunler')->WHERE('fiyat','>', 10)->GET()
Tablodaki verilerden tek bir şarta göre tek veri çekmek için
Örn: fiyatı 10 üzerinde olanlardan ilkini almak için
DB::TABLE('urunler')->WHERE('fiyat','>', 10)->FIRST()
Doğrudan ID’ye ait değere göre veri çekmek için:
DB::TABLE('urunler')->find(1);
Dizi halinde veri eklemek:
DB::TABLE('urunler')->INSERT(['name'=>'Product 10', 'slug'=> 'product-10', 'price'=>100])
Tablodaki kayıt sayısını bulmak
DB::TABLE('urunler')->COUNT()
Her tabloya karşılık gelecek model oluşturmak:
php artisan make:model modelAdi
modelAdi İsimli Modeldeki Verileri Listelemek
\App\Models\modelAdi::GET()
Laravel 8’de tinker kullanarak nesne oluşturmak:
$product = NEW \App\Models\Product;
Laravel 8 Tinker nesne içindeki verilerin veritabanına kaydedilmesi
$product->save()
Tablodaki bütün kolonlara veri ekleme yapılabilmesine olacak sağlayan kod model içinde kullanımı
protected $guarded = [];
Tabloda seçili bir alanı güncellemek;
App\Models\Urun::find(2)->UPDATE(['price' =>45.50]);
factory ile fake veriler oluşturmak
User::factory()->make();
Kullanım örneği:
use App\Models\User; public function test_models_can_be_instantiated() { $user = User::factory()->make(); // Use model in tests... }
Çoklu kullanım örneğin 3 adet kullanıcı oluşturmak için
User::factory()->count(3)->make();
Veritabanına eklemek için
User::factory()->count(3)->create();
Tabloyu boşlatmak için
DB::table('users')->truncate();
Factory Template Dosyası oluşturmak için
php artisan make:factory OrnekFactory
OrnekFactory içindeki ayarlamaları yaptıktan sonra tinker çalıştırmadan önce
composer dump-autoload
komutunu çalıştırmakta fadya var aksi halde hata alabilirsiniz.
seeders çalıştırmak
seed yapısı için run fonksiyonu içine
– 10 kullanıcı oluşturmak için
– bunu yapabilmek için daha önce UserFactory.php dosyasının olması ve gerekli düzenlemenin yapılmış olması gerekiyor.
User::factory()->count(10)->create();
Terminalden bu komutu çalıştırmak için
php artisan db:seed
DatabaseSeeder.php içinden işlemler;
– Tabloyu boşaltmak için
DB::statement("Truncate table users");
Özel Seeder Yapısı oluşturmak:
php artisan make:seeder OrnekTableSeeder
Harici seeder dosyalarını çağırmak:
Yukarıdaki gibi oluşturulan OrnekTableSeeder dosyasını DatabaseTableSeeder.php içine aşağıdaki gibi çağırarak kullanabiliriz:
$this->call(OrnekTableSeeder::class);
Tabloların içini tamamen silmek:
php artisan migrate:fresh
Tüm tabloları silmek ve ardından seed işlemiyle otomatik doldurmak için
php artisan migrate:fresh --seed
Controller’dan uyeler.blade.php’ye veri göndermek için
$uyeler = Uyeler::find(3); return view('uyeler', array('uyeler'=>$uyeler));
Şarta göre veri listelemek
$uyeler = Uyeler::where('id',4)->first(); return view('uyeler', array('uyeler'=>$uyeler));
WhereRaw fonksiyonu ile şarta göre veri listelemek
$uyeler = Uyeler::whereRaw('id=?', array(1))->first(); return view('uyeler', array('uyeler'=>$uyeler));
Birden fazla satır veri listelemek
$uyeler = Uyeler::all();
satır sayısını bulmak
$uyeSayisi = Uyeler::where('id', '>', 0)->count();
Yukarıda değişkene aktarılanları uyeler blade sayfasına postalamak için
return view('uyeler', array('uyeler'=>$uyeler, 'uyeSayisi' =>$uyeSayisi));
Route yapısı içinde factory kullanımı
Route::get('/users', function (){ return User::factory()->count(10)->make(); });
Controller oluştururken Otomatik model ve metodları oluşturmak
php artisan make:controller ProductController --resource --model=Product
Route Tanımlarını Listelemek
php artisan route:list
Api Klasörü içinde model tanımlı oluşturmak
php artisan make:controller Api\ProductController --api --model= product
apiResources Toplu Tanımlama Örneği:
Route::apiResources([ 'products' => 'App\Http\Controllers\Api\ProductController', 'users' => 'App\Http\Controllers\Api\UserController' ]);
Product isimli modeldeki dataların hepsini listelemek
return Product::all();
Product isimli modeldeki dataların hepsini listelemek 2. yol
return response()->json(Product::all(), 200);
ID’ye dayalı veri kontrolü yapmak (girilen id değerine karşılık veritabanında veri yoksa hata mesajı vermek)
public function show($id) { $product = Product::find($id); if ($product) return response($product, 200); else return response(['message' => 'Product not found'], 404); // return $product; }
Laravel 8 PUT / update işlemi için aşağıdaki yöntemler kullanılabilir
public function update(Request $request, product $product) { // $input = $request->all(); $product->update($input); return response([ 'data' => $product, 'message' => 'Product updated.' ], 200); }
yada
public function update(Request $request, product $product) { // $product->name = $request->name; $product->slug = Str::slug($request->name); $product->price = $request->price; $product->save(); return response([ 'data' => $product, 'message' => 'Product updated.' ], 200); }
Laravel 8 DELETE / silme işlemi için aşağıdaki yöntemi kullanabilirsiniz.
public function destroy(product $product)
{
//
$product->delete();
return response([
‘message’ => ‘Product deleted’
], 200);
}
Laravel 8 Paginate sayfalama kullanımı
– her sayfada 5 adet gösterim için
return response(Product::paginate(5),200);
Laravel 8 Paginate Offset ve limit kullanımı:
– varsayılan değerleri girerek sayfalama
$offset = $request->offset ? $request->offset: 0; $limit = $request->limit ? $request->limit: 10; return response(Product::offset($offset)->limit($limit)->get(),200);
Get kullanımı örnek:
– 11’den itibaren 5 kayıt ekrana gelecektir
http://127.0.0.1:8000/api/products?offset=10&limit=5
Laravel 8 sonrası factory kullanımıyla alakalı gelebilecek hatalardan birisi;
PHP Fatal error: Call to undefined function factory() in Psy Shell code on line 1
bu hatanın oluşmasına sebep olan komut satırı
factory(App\Models\User::class)->make();
ÇÖZÜM:
Laravel 8’de güncel olarak YUKARIDAKİ kod yerine aşağıdakini kullanarak sorunu çözebilirsiniz.
User::factory()->make();
Kullanım örneği:
use App\Models\User; public function test_models_can_be_instantiated() { $user = User::factory()->make(); // Use model in tests... }
Çoklu kullanım örneğin 3 adet oluşturmak için
User::factory()->count(3)->make();
Veritabanına eklemek için
User::factory()->count(3)->create();
Modele dizi halinde veri ekleme işlemi için
\App\Models\Product::create(['name'=>'Product 6', 'slug'=>'product-6', 'price'=>88 ])
kullanabilirsiniz.
Şöyle bir hata alıyorsanız;
Illuminate\Database\Eloquent\MassAssignmentException with message 'Add [name] to fillable property to allow mass assignment on [App\Models\Product].'
Product isimli model dosyasına eklenmesi gereken kod blogu;
protected $fillable = ['name', 'slug', 'price'];
** 3 adet veri ekleme denemesi yaptığımız sütunların isimlerini örnekteki gibi yapmamız gerekiyor.
Eğer Tinker kullanarak ekleme işlemi yapmaya çalışıyorsanız hatanın düzelmesi için tinkerı kapatıp tekrar başlatmanız gerekecektir.
hata kodu:
* @throws \Illuminate\Contracts\Container\BindingResolutionException * @throws \Illuminate\Contracts\Container\CircularDependencyException */ public function build($concrete) { // If the concrete type is actually a Closure, we will just execute it and // hand back the results of the functions, which allows functions to be // used as resolvers for more fine-tuned resolution of these objects. if ($concrete instanceof Closure) { return $concrete($this, $this->getLastParameterOverride()); } try { $reflector = new ReflectionClass($concrete); } catch (ReflectionException $e) { throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e); } // If the type is not instantiable, the developer is attempting to resolve // an abstract type such as an Interface or Abstract Class and there is // no binding registered for the abstractions so we need to bail out. if (! $reflector->isInstantiable()) { return $this->notInstantiable($concrete); } // if (in_array($concrete, $this->buildStack)) { // throw new CircularDependencyException("Circular dependency detected while resolving [{$concrete}]."); // } $this->buildStack[] = $concrete;
web.php’de hata almama sebep olan route yapısı:
Route::get('/xxx/{id}/', 'xxxController@show');
Hatanın düzelmesi için eklenmesi gereken kod: App\Http\Controllers\
Düzeltmeden sonrası:
Route::get('/xxx/{id}/', 'App\Http\Controllers\xxxController@show');