Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
April 5, 2022 05:00 pm GMT

Eloquent Tips and Tricks - Laravel

I found this wonderful article https://laravel-news.com/eloquent-tips-tricks that contains a lot of tips, specifically 20 tips that will help you in your advice with dealing with databases and will make your next project more powerful and accurate, and I will talk about some points that interest me

  • Increments and Decrements
// 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); // +10Product::find($produce_id)->decrement('stock'); // -1
  • Model boot() method
public static function boot(){  parent::boot();  self::creating(function ($model) {    $model->uuid = (string)Uuid::generate();  });}
  • Model properties: timestamps, appends etc
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 overriddenpublic $timestamps = false; // or even not used at all
  • WhereX
$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'));
  • BelongsTo Default Models
{{ $post->author->name ?? '' }}// we can assign default property values to that default modelpublic function author(){    return $this->belongsTo('App\Author')->withDefault([        'name' => 'Guest Author'    ]);}
  • Order by Mutator
// Imagine you have thisfunction 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!
  • Default ordering in global scope
protected static function boot(){    parent::boot();    // Order by name ASC    static::addGlobalScope('order', function (Builder $builder) {        $builder->orderBy('name', 'asc');    });}
  • Raw query methods
// whereRaw$orders = DB::table('orders')    ->whereRaw('price > IF(state = "TX", ?, 100)', [200])    ->get();// havingRawProduct::groupBy('category_id')->havingRaw('COUNT(*) > 1')->get();// orderByRawUser::where('created_at', '>', '2016-01-01')  ->orderByRaw('(updated_at - created_at) desc')  ->get();
  • Chunk() method for big tables
// Instead of$users = User::all();foreach ($users as $user) { }// You can doUser::chunk(100, function ($users) {    foreach ($users as $user) {        // ...    }});
  • Override updated_at when saving
$product = Product::find($id);$product->updated_at = '2019-01-01 10:00:00';$product->save(['timestamps' => false]);
  • What is the result of an update()
$result = $products->whereNull('category_id')->update(['category_id' => 2]);
  • orWhere with multiple parameters
// 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]);

I tried to present some basic points, but to go deeper, visit the source.
I hope you enjoyed with me and I adore you who search for everything new.


Original Link: https://dev.to/morcosgad/eloquent-tips-and-tricks-laravel-3n94

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To