この記事では、コードの可読性を向上させるための 6 つの Laravel Eloquent のヒントをまとめて共有します。
Eloquent は、Laravel によってデフォルトで使用される ORM です。アクティブ記録モードが使用されます。より簡単な方法でデータベースを操作できるようになります。個々のモデルは、操作可能なデータベース内のテーブルを表します。この記事では、コードを改善するためにあまり知られていない隠された秘密、メソッド、プロパティを多かれ少なかれ紹介します。
/** * 指示是否在数组上使用蛇形大小写属性。 * * @var bool */ public static $snakeAttributes = true;
Eloquence by Kirk Bushell をチェックすることをお勧めします。
Pagination Laravel の Eloquent ORM を使用している場合、これは朗報です。すぐに使用できるページネーション方法を提供します。次のような記述に慣れているかもしれません:$comments = Comment::paginate(20);
protected $perPage = 30;
user という名前のモデルがあるとします。これに FullName アクセサーを追加します。
function getFullNameAttribute() { return sprintf('%s %s', $this->first_name, $this->last_name); }
full_name 属性にアクセスできるようになります。
User::latest()->first()->full_name;
$appends 属性をモデルに追加します。 1 つ以上のフィールドを含む配列を受け入れます。これらのフィールドは今後自動的に追加されます。次のように書くだけです:
protected $appends = ['full_name'];
class Video extends Model { public function setDurationInMinutes($value) { $this->attributes['duration_in_seconds'] = $value * 60; } public function setDurationInHours($value) { $this->attributes['duration_in_seconds'] = $value * 60 * 60; } }
duration_in_ minutes
フィールドは model で使用されていますが、バックグラウンドでは
duration_in_seconds を使用して更新するか、存在しないフィールド
duration_in_hours を使用することもできます。 。このロジックに従って、コントローラー内で次のように呼び出します。
class AnyController { public function store() { $video->update([ 'title' => request('title'), 'duration_in_minutes' => request('duration_in_minutes'), ]); } }
その結果を正しいフィールドにマップします。 熱心な読み込み: $with で
$comments = Comment::all(); foreach ($comments as $comment) { echo $comment->user->name; }
$comments = Comment::with('user')->get(); foreach ($comments as $comment) { echo $comment->user->name; }
这会以两个查询结束。第一个查询获取所有注释,第二个查询立即获取所有关联用户。在后台,会发生以下情况(简化版SQL):
SELECT id, user_id, body FROM comments; SELECT name FROM users WHERE user_id IN (1,2,3,4,5...);
不论是 10、500 还是 10000 条评论数据都不重要,我们都依旧只执行两次SQL查询。
好了,你现在已经看到如何使用渴求式加载了。但只限于如何手动使用。你还可以将整个过程自动化,以便某些关联关系总是自动通过渴求式方式加载。为此,需要给模型设定一个属性。
protected $with = [];
我们可以在Comment
model简单设置 protected $with = ['user'];
, 从现在起,user
在任何时候都会自动加载。
我们还有很多种渴求式加载,有仅加载特定列、嵌套即时加载、多个即时加载等等。更多详情请Laravel文档或深入核心。
有的时候需要查询所有的主键 ID, 查询是否复杂并不重要,大多数人可能会像这样做:
User::all()->pluck('id');
这个操作很 nice,但是返回的是一个集合,想要转换成数组的话可以使用 toArray()
。
User::all()->pluck('id')->toArray();
大多数情况下,上面的操作的可以简化成这样:
User::all()->modelKeys();
这种方式返回一个数组。重要的是这个方法并不会总是返回 id
。 顾名思义,他是以数组的形式返回所有模型主键。主键默认是id
,同时也可以在模型中定义主键名。
protected $primaryKey = 'id';
原文地址:https://laravel-news.com/6-eloquent-secrets
译文地址:https://www.php.cn/link/c7decb5ce28209911b545d0b1059c5e3
【相关推荐:laravel视频教程】
以上がコードの可読性を向上させるための Laravel Eloquent の 6 つのヒント!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。