雄弁なヒントとトリック
私はこの素晴らしい記事https://laravel-news.com/eloquent-tips-tricksは、ヒントの多くは、具体的には、データベースを扱うとあなたのアドバイスを支援し、次のプロジェクトをより強力かつ正確になる20のヒントが含まれており、私は興味があるいくつかのポイントについて話します増分と減少
モデルboot ()メソッド
モデルのプロパティ:タイムスタンプ、付録等
所有物デフォルトモデル
RAWクエリメソッド
chunk ()メソッド
オーバーライドします
update ()の結果は何ですか
orwhere
私はあなたが私と一緒に楽しんで、私はすべてのすべてを検索するあなたを崇拝してほしい.
// Instead of this
$article = Article::find($article_id);
$article->read_count++;
$article->save();
// You can do this
$article = Article::find($article_id);
$article->increment('read_count');
Article::find($article_id)->increment('read_count');
Article::find($article_id)->increment('read_count', 10); // +10
Product::find($produce_id)->decrement('stock'); // -1
public static function boot()
{
parent::boot();
self::creating(function ($model) {
$model->uuid = (string)Uuid::generate();
});
}
class User extends Model {
protected $table = 'users';
protected $fillable = ['email', 'password']; // which fields can be filled with User::create()
protected $dates = ['created_at', 'deleted_at']; // which fields will be Carbon-ized
protected $appends = ['field1', 'field2']; // additional values returned in JSON
}
protected $primaryKey = 'uuid'; // it doesn't have to be "id"
public $incrementing = false; // and it doesn't even have to be auto-incrementing!
protected $perPage = 25; // Yes, you can override pagination count PER MODEL (default 15)
const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at'; // Yes, even those names can be overridden
public $timestamps = false; // or even not used at all
$users = User::where('approved', 1)->get();
$users = User::whereApproved(1)->get();
User::whereDate('created_at', date('Y-m-d'));
User::whereDay('created_at', date('d'));
User::whereMonth('created_at', date('m'));
User::whereYear('created_at', date('Y'));
{{ $post->author->name ?? '' }}
// we can assign default property values to that default model
public function author()
{
return $this->belongsTo('App\Author')->withDefault([
'name' => 'Guest Author'
]);
}
リトルビッグプラネット™2でアップロード// Imagine you have this
function getFullNameAttribute()
{
return $this->attributes['first_name'] . ' ' . $this->attributes['last_name'];
}
$clients = Client::orderBy('full_name')->get(); // doesn't work
$clients = Client::get()->sortBy('full_name'); // works!
グローバル・スコープでのprotected static function boot()
{
parent::boot();
// Order by name ASC
static::addGlobalScope('order', function (Builder $builder) {
$builder->orderBy('name', 'asc');
});
}
// whereRaw
$orders = DB::table('orders')
->whereRaw('price > IF(state = "TX", ?, 100)', [200])
->get();
// havingRaw
Product::groupBy('category_id')->havingRaw('COUNT(*) > 1')->get();
// orderByRaw
User::where('created_at', '>', '2016-01-01')
->orderByRaw('(updated_at - created_at) desc')
->get();
大きいテーブルのための// Instead of
$users = User::all();
foreach ($users as $user) { }
// You can do
User::chunk(100, function ($users) {
foreach ($users as $user) {
// ...
}
});
保存時には$product = Product::find($id);
$product->updated_at = '2019-01-01 10:00:00';
$product->save(['timestamps' => false]);
$result = $products->whereNull('category_id')->update(['category_id' => 2]);
複数のパラメータを持つ// you can pass an array of parameters to orWhere() “Usual” way
$q->where('a', 1);
$q->orWhere('b', 2);
$q->orWhere('c', 3);
$q->where('a', 1);
$q->orWhere(['b' => 2, 'c' => 3]);
私はいくつかの基本的なポイントを提示しようとしたが、深く行くには、ソースを参照してください.私はあなたが私と一緒に楽しんで、私はすべてのすべてを検索するあなたを崇拝してほしい.
Reference
この問題について(雄弁なヒントとトリック), 我々は、より多くの情報をここで見つけました https://dev.to/morcosgad/eloquent-tips-and-tricks-laravel-3n94テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol