Laravel渴求式加載比較容易理解理解load與with關系)

      網友投稿 997 2022-05-29

      渴求式加載

      當以屬性方式訪問 Eloquent關聯關系的時候,關聯關系數據是「懶惰式加載」的,這意味著關聯關系數據直到第一次訪問的時候才被加載。不過,Eloquent 還可以在查詢父級模型的同時「渴求式加載」關聯關系。渴求式加載緩解 N+1 查詢問題,要闡明 N+1 查詢問題,查看關聯到 Auth的 Book模型:

      Laravel學院文檔: https://laravelacademy.org/post/9584.html

      根據官方文檔, 創建兩個表,不多說.

      新建兩個model模型

      php artisan make:model Auth php artisan mkae:model Book

      然后創建對應的表關聯關系

      namespace App;

      use Illuminate\Database\Eloquent\Model;

      class Book extends Model

      {

      protected $table = 'book';

      public function auth()

      {

      return $this->belongsTo('App\Auth');

      }

      }

      public function lst()

      {

      $books = Book::all();

      foreach ($books as $book){

      echo $book->auth->name;

      }

      }

      去頁面查看輸出信息和SQL語句

      public function lst()

      {

      $books = Book::with('auth')->get();

      foreach ($books as $book){

      echo $book->auth->name;

      }

      }

      查看輸出結果,發現,效果一樣,但原本執行的多條sql 變成了兩條

      渴求式加載多個關聯關系

      有時候你需要在單個操作中渴求式加載多個不同的關聯關系。要實現這個功能,只需要添加額外的參數到with方法即可:

      在這里,我又新建了一個category表

      在Book模型中又加了一個與category表的關聯關系

      public function category()

      {

      //這里我在book表中與category表關聯的外鍵字段是cate_id,而laravel中默認是category_id,所以修改第二個參數為cate_id

      return $this->belongsTo('App\Category','cate_id');

      }

      修改代碼

      public function lst()

      {

      $books = Book::with('auth','category')->get();

      foreach ($books as $book){

      echo $book->category->name;

      echo $book->auth->name;

      }

      }

      namespace App;

      use Illuminate\Database\Eloquent\Model;

      class Auth extends Model

      {

      protected $table = 'auth';

      public function contact()

      {

      return $this->belongsTo('App\Contact');

      }

      }

      然后修改控制器中的代碼

      public function lst()

      {

      //通過 . 點號 來加載auth模型的contact關聯表

      $books = Book::with('auth.contact')->get();

      echo '

      ';

      foreach ($books as $book){

      echo $book->name;

      echo '
      ';

      echo $book->auth->name;

      echo '
      ';

      echo $book->auth->contact->email;

      echo '


      ';

      }

      }

      查看頁面輸出信息,這里將auth關聯的contact表的信息也查出來了.

      渴求式加載指定字段

      并不是每次獲取關聯關系時都需要所有字段,因此,Eloquent 允許你在關聯查詢時指定要查詢的字段:

      $users = Book::with('auth:id,name')->get();

      注:使用這個特性時,id字段是必須列出的。

      public function lst()

      {

      $books = Book::with('auth:id,name')->get()->toArray();

      dd($books);

      }

      查看頁面輸出代碼 auth下只有id和name兩個字段了 其他多余的字段都沒有了

      帶條件約束的渴求式加載

      有時候我們希望渴求式加載一個關聯關系,但還想為渴求式加載指定更多的查詢條件:

      $books = Book::with(['auth' => function ($query) {

      //約束條件

      $query->where('name', 'like', '吳%');

      }])->get();

      dd($books);

      $books = Book::with(['auth' => function ($query) {

      $query->orderBy('name', 'desc');

      }])->get();

      懶惰渴求式加載

      有時候你需要在父模型已經被獲取后渴求式加載一個關聯關系。例如,這在你需要動態決定是否加載關聯模型時可能很有用:

      $books = Book::all();

      $res = true;

      if($res){

      $books->load('auth','category');

      }

      dd(collect($books)->toArray());

      如果你需要設置更多的查詢條件到渴求式加載查詢上,可以傳遞一個包含你想要記載的關聯關系數組到 load 方法,數組的值應該是接收查詢實例的閉包:

      Laravel渴求式加載(比較容易理解理解load與with關系)

      $books->load(['auth' => function ($query) {

      $query->orderBy('name', 'asc');

      }]);

      如果想要在關系管理尚未被加載的情況下加載它,可以使用 loadMissing 方法:

      public function lst(Book $book)

      {

      $book->loadMissing('auth');

      return [

      'name' => $book->name,

      'auth' => $book->auth->name

      ];

      }

      最后這個…試了很久,在大佬的幫助下完成了.

      直接從文檔復制過來就報錯了!!!坑啊

      需要在路由那傳遞一個id

      Route::get('book/{id}','ArticleController@lst');

      去掉loadMissing之后…下面那行sql語句變了,但是感覺沒啥用啊.不知道這個東西有什么用.

      原文:https://blog.csdn.net/u013032345/article/details/82772938

      Laravel SQL

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:華為云創新技術再加碼,為政企智能升級全面加速
      下一篇:Python實現進程同步和通信
      相關文章
      中文字幕 亚洲 有码 在线| 亚洲综合成人婷婷五月网址| 亚洲国产精品成人综合色在线| 亚洲成人免费网站| 亚洲免费在线视频| 亚洲成AV人片在线观看ww| 国产gv天堂亚洲国产gv刚刚碰| 亚洲人成www在线播放| 亚洲国产精品午夜电影 | 亚洲电影国产一区| 亚洲av永久无码精品漫画| 亚洲午夜久久久影院伊人| 国产亚洲人成网站在线观看| 亚洲人成影院在线无码观看| 亚洲国产成人久久综合碰| 亚洲精品国产自在久久 | 亚洲人成图片小说网站| 国产亚洲精品a在线无码| 国内成人精品亚洲日本语音| 九九精品国产亚洲AV日韩| jzzijzzij在线观看亚洲熟妇| 色噜噜噜噜亚洲第一| 亚洲国产精品成人久久蜜臀 | 亚洲人成色77777在线观看| 亚洲午夜成人精品无码色欲| 亚洲欧美国产国产一区二区三区| 亚洲一线产品二线产品| 亚洲gay片在线gv网站| 亚洲AV成人精品日韩一区18p| 亚洲国产精品尤物YW在线观看| 亚洲国产成人乱码精品女人久久久不卡| 亚洲国产成人乱码精品女人久久久不卡 | 亚洲激情电影在线| 亚洲人成综合在线播放| 一本色道久久88—综合亚洲精品| 亚洲人成自拍网站在线观看| 大桥未久亚洲无av码在线| 亚洲视频在线精品| 精品国产亚洲一区二区三区| 亚洲精品动漫人成3d在线 | 亚洲精品乱码久久久久久蜜桃|