https://speakerdeck.com/willroth/50-laravel-tricks-in-50-minutes
https://www.reddit.com/r/laravel/comments/3to60i/50_laravel_tricks/
1. Automatic Model Validation
class Post extends Eloquent
{
public staic $ autoValidates = true ;
protected static $ rules = [];
protected static function boot ()
{
parent ::boot ();
// or static::creating, or static::updating
static ::saving (function ($ model )
{
if ($ model ::$ autoValidates ) {
return $ model ->validate ();
}
});
}
public function validate ()
{
}
}
class Post extends Eloquent
{
protected static function boot ()
{
parent ::boot ();
static ::updating (function ($ model )
{
return false ;
});
}
}
3. Conditional Relationships
class myModel extends Model
{
public function category ()
{
return $ this ->belongsTo ('myCategoryModel ' , 'categories_id ' )
->where ('users_id ' , Auth::user ()->id );
}
}
4. Expressive "Where" Syntax
$ products = Product::where ('category ' , '= ' , 3 )->get ();
$ products = Product::where ('category ' , 3 )->get ();
$ products = Product::whereCategory (3 )->get ();
5. Query Builder: Having Raw
SELECT *, COUNT (*) FROM products GROUP BY category_id HAVING count(*) > 1 ;
DB ::table ('products ' )
->select ('* ' , DB ::raw ('COUNT(*) as products_count ' ))
->groupBy ('category_id ' )
->having ('products_count ' , '> ' , 1 )
->get ();
$ q ->whereDate ('created_at ' , date ('Y-m-d ' ));
$ q ->whereDay ('created_at ' , date ('d ' ));
$ q ->whereMonth ('created_at ' , date ('m ' ));
$ q ->whereYear ('created_at ' , date ('Y ' ));
// src/Illuminate/Database/Eloquent/Model.php
public function save(array $ options = [])
// src/Illuminate/Database/Eloquent/Model.php
protected function performUpdate (Builder $ query , array $ options =[])
{
if ($ this ->timestamps && array_get ($ options , 'timestamps ' , true ))
{
$ this ->updateTimestamps ();
}
}
$ product = Product::find ($ id );
$ product ->updated_at = '2015-01-01 00:00:00 ' ;
$ product ->save (['timestamps ' =>false ]);
$ questions = Question::orderByRaw ('RAND() ' )->take (10 )->get ();
10. UUID Model Primary Key
use Ramsey \Uuid \Uuid ;
trait UUIDModel
{
public $ incrementing = false ;
protected static function boot ()
{
parent ::boot ();
static ::creating (function ($ model )
{
$ key = $ model ->getKeyName ();
if (empty ($ model ->{$ key })) {
$ model ->{$ key } = (string ) $ model ->generateNewId ();
}
});
}
public function generateNewUuid ()
{
return Uuid::uuid4 ();
}
}
11. Ordered Relationships
class Category extends Model
{
public function products ()
{
return $ this ->hasMany ('App\Product ' )->orderBy ('name ' );
}
}
12. Simple Incrementing & Decrementing
$ customer = Customer::find ($ customer_id );
$ loyalty_points = $ customer ->loyalty_points + 50 ;
$ customer ->update (['loyalty_points ' => $ loyalty_points ]);
// adds one loyalty point
Customer::find ($ customer_id )->increment ('loyalty_points ' , 50 );
// subtracts one loyalty point
Customer::find ($ customer_id )->decrement ('loyalty_points ' , 50 );
14. Appending Mutated Properties
15. Filter only rows with child rows
class Category extends Model
{
public function products ()
{
return $ this ->hasMany ('App\Product ' );
}
}
public function getIndex ()
{
$ categories = Category::with ('products ' )->has ('products ' )->get ();
return view ('categories.index ' , compact ('categories ' ));
}
16. Return relations on model save
public function store ()
{
$ post = new Post ;
$ post ->fill (Input::all ());
$ post ->user_id = Auth::user ()->user_id ;
$ post ->user ;
return $ post ->save ();
}