nasrulhazim
7/15/2018 - 1:52 PM

Laravel 5 Eloquent CheatSheet #laravel #eloquent

Laravel 5 Eloquent CheatSheet #laravel #eloquent

Model::

  /*Select*/
  select('col1','col2')
  ->select(array('col1','col2'))
  ->select(DB::raw('businesses.*, COUNT(reviews.id) as no_of_ratings, IFNULL(sum(reviews.score),0) as rating'))  
  ->addSelect('col3','col4')
  ->distinct() // distinct select
  
  /*From*/
  ->from('table')
  ->from(DB::raw('table, (select @n :=0) dummy'))
  ->from(DB::raw("({$subQuery->toSql()}) T ")->mergeBindings($subQuery->getQuery())

  
  /*Query*/
  ->where('column','value')
  ->where('column','LIKE','%'.$value.'%')
  ->where(function ($query) {
  	$query->where('a', '=', 1)
    	->orWhere('b', '=', 1);
  })
  ->orWhere('column','!=', 'value')
  ->whereRaw('age > ? and votes = 100', array(25))
  
  ->whereRaw(DB::raw("id in (select city_id from addresses GROUP BY addresses.city_id)"))
  
  ->whereExists(function($query)
  {
  	$query->select(DB::raw(1))
        ->from('business_language')
        ->whereRaw('business_language.language_id = languages.id')
        ->groupBy('business_language.language_id')
        ->havingRaw("COUNT(*) > 0");
  })
  ->orWhereExists()
  ->whereNotExists()
  ->orWhereNotExists()
  
  ->whereIn('column',[1,2,3])
  ->orWhereIn()
  ->whereNotIn('id', function($query){
    $query->select('city_id')
    ->from('addresses')
    ->groupBy('addresses.city_id');
  })
  ->whereNotIn()
  ->orWhereNotIn
  
  ->whereNull('column') //where `column` is null
  ->orWhereNull('column') //or where `column` is null
  ->whereNotNull('column')  //where `column` is not null 
  ->orWhereNotNull('column')  //or where `column` is not null 
  
  ->whereDay()
  ->whereMonth('column', '=', 1) //
  ->whereYear('column', '>', 2000) //uses sql YEAR() function on 'column'
  ->whereDate('column', '>', '2000-01-01')
  
  /*Joins*/
  ->join('business_category','business_category.business_id','=','businesses.id')
  ->leftJoin('reviews','reviews.business_id', '=', 'businesses.id')
  ->join('business_category',function($join) use($cats) {
    $join->on('business_category.business_id', '=', 'businesses.id')
    ->on('business_category.id', '=', $cats, 'and', true);
  })
  ->join(DB::raw('(SELECT *, ROUND(AVG(rating),2) avg FROM reviews WHERE rating!=0 GROUP BY item_id ) T' ), function($join){
  	$join->on('genre_relation.movie_id', '=', 'T.id')
  })
  
  /*Eager Loading */
  ->with('table1','table2')
  ->with(array('table1','table2','table1.nestedtable3'))
  ->with(array('posts' => function($query) use($name){
    $query->where('title', 'like', '%'.$name.'%')
      ->orderBy('created_at', 'desc');
  }))
  
  
  /*Grouping*/
  ->groupBy('state_id','locality')
  ->havingRaw('count > 1 ')
  ->having('items.name','LIKE',"%$keyword%")
  ->orHavingRaw('brand LIKE ?',array("%$keyword%"))
				
  /*Cache*/
  ->remember($minutes)
  ->rememberForever()
    
  /*Offset & Limit*/
  ->take(10)
  ->limit(10)
  ->skip(10)
  ->offset(10)
  ->forPage($pageNo, $perPage)
  
  /*Order*/
  ->orderBy('id','DESC')
  ->orderBy(DB::raw('RAND()'))
  ->orderByRaw('type = ? , type = ? ', array('published','draft'))
  ->latest() // on 'created_at' column
  ->latest('column')
  ->oldest() // on 'created_at' column
  ->oldest('column')
  
  /*Create*/
  ->insert(array('email' => 'john@example.com', 'votes' => 0))
  ->insert(array(   
    array('email' => 'taylor@example.com', 'votes' => 0),
    array('email' => 'dayle@example.com', 'votes' => 0)
  )) //batch insert
  ->insertGetId(array('email' => 'john@example.com', 'votes' => 0)) //insert and return id
  
  /*Update*/
  ->update(array('email' => 'john@example.com'))
  ->update(array('column' => DB::raw('NULL')))
  ->increment('column')
  ->decrement('column')
  ->touch() //update timestamp
  
  /*Delete*/
  ->delete()
  ->forceDelete() // when softdeletes enabled
  ->destroy($ids) // delete by array of primary keys
  ->roles()->detach() //delete from pivot table: associated by 'belongsToMany'
  
  
  /*Getters*/
  ->find($id)
  ->find($id, array('col1','col2'))
  ->findOrFail($id)
  ->findMany($ids, $columns)
  ->first(array('col1','col2'))
  ->firstOrFail()
  ->all()
  ->get()
  ->get(array('col1','col2')) 
  ->getFresh() // no caching
  ->getCached() // get cached result
  ->chunk(1000, function($rows){
  	$rows->each(function($row){
  		
  	});
  })
  ->lists('column') // numeric index
  ->lists('column','id') // 'id' column as index
  ->lists('column')->implode('column', ',') // comma separated values of a column
  ->pluck('column')  //Pluck a single column's value from the first result of a query.
  ->value('column')  //Get a single column's value from the first result of a query.
  
  /*Paginated results*/
  ->paginate(10)
  ->paginate(10, array('col1','col2'))
  ->simplePaginate(10)
  ->getPaginationCount() //get total no of records
  
  /*Aggregate*/
  ->count()
  ->count('column')
  ->count(DB::raw('distinct column'))
  ->max('rating')
  ->min('rating')
  ->sum('rating')
  ->avg('rating')
  ->aggregate('sum', array('rating')) // use of aggregate functions
  
  /*Others*/
  ->toSql() // output sql query
  ->exists() // check if any row exists
  ->fresh() // Return a fresh data for current model from database
  
  /*Object methods*/
  ->toArray() //
  ->toJson()
  ->relationsToArray() //Get the model's relationships in array form.
  ->implode('column', ',') // comma separated values of a column
  ->isDirty()
  ->getDirty() //Get the attributes that have been changed but not saved to DB
  
//Debugging
DB::enableQueryLog();
DB::getQueryLog();
Model::where()->toSql() // output sql query