Laravel 9個不經常用的小技巧

1. 更新父表的timestamps

如果你想在更新關聯表的同時,更新父表的timestamps,你只需要在關聯表的model中添加touches屬性。
比如我們有PostComment兩個關聯模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    /**
     * 要更新的所有關聯表
     *
     * @var array
     */
    protected $touches = ['post'];

    /**
     * Get the post that the comment belongs to.
     */
    public function post()
    {
        return $this->belongsTo('App\Post');
    }
}

2. 懶加載指定字段

$posts = App\Post::with('comment:id,name')->get();

3. 跳轉指定控制器並附帶參數

return redirect()->action('SomeController@method', ['param' => $value]);

4. 關聯時使用withDefault()

在調用關聯時,如果另一個模型不存在,系統會拋出一個致命錯誤,例如 $comment->post->title,那麼我們就需要使用withDefault()

...
public function post()
{
    return $this->belongsTo(App\Post::class)->withDefault();
}

5. 兩層循環中使用$loop

bladeforeach中,如果你想獲取外層循環的變量

@foreach ($users as $user)     
 @foreach ($user->posts as $post)         
    @if ($loop->parent->first)             
       This is first iteration of the parent loop.         
   @endif     
 @endforeach 
@endforeach

6. 瀏覽郵件而不發送

如果你使用的是mailables來發送郵件,你可以只展示而不發送郵件

Route::get('/mailable', function () {
    $invoice = App\Invoice::find(1);
    return new App\Mail\InvoicePaid($invoice);
});

7. 通過關聯查詢記錄

hasMany關聯關係中,你可以查詢出關聯記錄必須大於5的記錄

$posts = Post::has('comment', '>', 5)->get();

8. 軟刪除

查看包含軟刪除的記錄

$posts = Post::withTrashed()->get();

查看僅被軟刪除的記錄

$posts = Post::oblyTrashed()->get();

恢復軟刪除的模型

Post::withTrashed()->restore();

9. Eloquent時間方法

$posts = Post::whereDate('created_at', '2018-01-31')->get(); 
$posts = Post::whereMonth('created_at', '12')->get(); 
$posts = Post::whereDay('created_at', '31')->get(); 
$posts = Post::whereYear('created_at', date('Y'))->get(); 
$posts = Post::whereTime('created_at', '=', '14:13:58')->get();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章