$table->string('name')->index();
// eğer bağlı olduğu yer natural bağlı olacağı yer ise
$table->foreignId('company_id')->constrained();
// eğer bağlı olduğu yer natural bağlı olacağı yer değil ise tablo adını yaz
$table->foreignId('company_id')->constrained('stores');
2. yol
$table->unsignedBigInteger('role_id')->default(1);
$table->foreign('role_id')->references('id')->on('roles');
$table->foreignId('user_id')
->constrained()
->onUpdate('cascade')
->onDelete('cascade');
dropForeign(['kolon_adi'])
metodu kullanılabilir.
$table->dropForeign(['user_id']);
after('column_name')
diyebilirsin.
$table->string('name')->after('city');
buradaki after()
metodunun sıralama önemli... sütunu tanımladıktan sonra hemen after() metodunu koymamız lazım.
$table->foreignId('goal_id')->after('date')->nullable()->constrained();
php artisan migrate:fresh --seed
public function up()
{
Schema::create('roles', function(Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
$roles = ['User', 'Administrator', 'Publisher'];
foreach($roles as $role) {
Role::create(['name' => $role]);
}
}
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="mt-3">
<label class="mb-0 font-weight-bold" for="">Profil Adınız:</label>
<input class="form-control" type="text" name="alias" placeholder="ör. crazyboy89" value="{{ old('alias') }}" required>
@error('alias')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
</div>
request()->validate(['email' => 'required|email']);
$user->email = request('email');
redirect('/')->with('success', 'Email saved');
şeklinde yapabilirim.
php artisan route:list
komutunu çalıştırabilirsin.php artisan route:list --columns=action,uri,name
gibi bir komut kullanabilirsin.
php artisan make:controller PhotoController --resource
veya belli bir modele bağlamak istersen
php artisan make:controller PhotoController --resource --model=Photo
hatta request dosyalarını da aynı anda hazırlamak istersen
php artisan make:controller PhotoController --resource --model=Photo --requests
use App\Http\Controllers\PhotoController;
Route::resource('photos', PhotoController::class)->only(['index', 'show']);
// veya
Route::resource('photos', PhotoController::class)->except(['create', 'store', 'update', 'destroy']);
protected function mapWebRoutes()
{
Route::middleware('web')
//->namespace($this->namespace)
->group(base_path('routes/web.php'));
}
Route::resource('articles', ArticleController::class)->middleware('auth');
ama tek tek farklı routelar için yapmak yerine bu nevi bir middleware'e ihtiyaç duyacak routeları grup içine alıp, o gruba toptan middleware uygulayabilirim.
Route::group(['middleware' => 'auth'], function() {
Route::resource('articles', ArticleController::class);
});
Route::group(['middleware' => 'auth'], function() {
Route::resource('articles', ArticleController::class);
// Admin routes
Route::group(['middleware' => 'is_admin'], function() {
Route::resource('categories', CategoryController::class);
})
});
try {
$response = $mailchimp->lists->addListMember('de213', [
'email_address' => request('email'),
'status' => 'subscribed'
]);
} catch (\Exception $e) {
throw ValidationException::withMessages([
'email' => 'This email could not be added to our list',
]);
}
@error('email')
{{ $message }}
@enderror
public function update(Request $request, Article $article)
{
$data = $request->all();
$data['published_at'] = $request->input('published) ? now() : null;
$article->update($data);
return redirect()->route('articles.index');
}
Step::chunk(200, function ($steps) {
foreach ($steps as $step) {
$step->user_id = $step->body->user->id;
$step->save();
}
});
Hash::check()
metodunu kullanabiliriz.
if (Hash::check($request->password, $user->password)) {
$user->password = Hash::make($request->newpassword);
$user->save();
}
<input type="checkbox" name="published" value="1" /> Published
Bunu True/false olarak işlemek için:
Article::create($request->all() + [
'user_id' => auth()->id(),
'published_at' => $request->input('published) ? now() : null
]);
Article::create($request->all() + ['user_id' => auth()->id()]);
Article::where('user_id', auth()->id())->get();
diyerek yapabilirim. Ama Controller içinde farklı farklı birçok/her fonksiyonda işlem yapmadan önce özellikle bu kontrole ihtiyacım oluyorsa, bu kontrolü modelin içine Global Scope olarak ta atayabilirim. Article Model'inde
use Illuminate\Database\Eloquent\Builder;
...
protected static function booted()
{
if (auth()->check()) {
static::addGlobalScope('user', function(Builder $builder) {
$builder->where('user_id', auth()->id());
});
}
}
ayrıca kullanıcı admin değilse sadece kendi makalesini görsün, yoksa bütün makaleleri görebilsin dersek:
use Illuminate\Database\Eloquent\Builder;
...
protected static function booted()
{
if (auth()->check() && !auth()->user()->is_admin) {
static::addGlobalScope('user', function(Builder $builder) {
$builder->where('user_id', auth()->id());
});
}
}
public function getIsAdminAttribute()
{
return $this->role_id == 2;
}
Aslında is_admin diye bir attribute'um yok ama bunu daha sonra template'te sanki attribute gibi kullanıp, kontrol sağlayabiliyorum.
@if(auth()->user()->is_admin)
<input type="checkbox" name="published" value="1"
@if($article->published_at) checked @endif /> Published
@endif