10 Laravel Eloquent tips and tricks
Posted on: January 29, 2020 12:18 PM
Posted by: Renato
Views: 376
1. Automatic Model Validation
It can sometimes be convenient to automatically validate your model when it gets created or updated. This is very easily achieved with Laravel through the use of Model events.
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()
{
}
}
2. Prevent updating
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();
6. Simple Date Filtering
$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'));
7. Save Options
// 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]);
8. Multilanguage Support
// TODO
9. Retrieve Random Rows
$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->generateNewUuid();
}
});
}
public function generateNewUuid()
{
return Uuid::uuid4();
}
}
1
Donate to Site
About Author
Renato
Developer
Add a Comment
Comments 0 Comments
No comments yet! Be the first to comment
Blog Search
Categories
OUTROS (16)
Variados (109)
PHP (133)
Laravel (171)
Black Hat (3)
front-end (29)
linux (114)
postgresql (39)
Docker (28)
rest (5)
soap (1)
webservice (6)
October (1)
CMS (2)
node (7)
backend (13)
ubuntu (56)
devops (25)
nodejs (5)
npm (3)
nvm (1)
git (8)
firefox (1)
react (7)
reactnative (5)
collections (1)
javascript (7)
reactjs (8)
yarn (0)
adb (1)
Solid (2)
blade (3)
models (1)
controllers (0)
log (1)
html (2)
hardware (3)
aws (14)
Transcribe (2)
transcription (1)
google (4)
ibm (1)
nuance (1)
PHP Swoole (5)
mysql (31)
macox (4)
flutter (1)
symfony (1)
cor (1)
colors (2)
homeOffice (2)
jobs (3)
imagick (2)
ec2 (1)
sw (1)
websocket (2)
markdown (1)
ckeditor (1)
tecnologia (14)
faceapp (1)
eloquent (14)
query (4)
sql (40)
ddd (3)
nginx (9)
apache (4)
certbot (1)
lets-encrypt (3)
debian (12)
liquid (1)
magento (2)
ruby (1)
LETSENCRYPT (1)
Fibonacci (1)
wine (1)
transaction (1)
pendrive (1)
boot (1)
usb (1)
prf (1)
policia (2)
federal (1)
lucena (1)
mongodb (4)
paypal (1)
payment (1)
zend (1)
vim (4)
ciencia (6)
js (1)
nosql (1)
java (1)
JasperReports (1)
phpjasper (1)
covid19 (1)
saude (1)
athena (1)
cinnamon (1)
phpunit (2)
binaural (1)
mysqli (3)
database (42)
windows (6)
vala (1)
json (2)
oracle (1)
mariadb (4)
dev (12)
webdev (24)
s3 (4)
storage (1)
kitematic (1)
gnome (2)
web (2)
intel (3)
piada (1)
cron (2)
dba (18)
lumen (1)
ffmpeg (2)
android (2)
aplicativo (1)
fedora (2)
shell (4)
bash (3)
script (3)
lider (1)
htm (1)
csv (1)
dropbox (1)
db (3)
combustivel (2)
haru (1)
presenter (1)
gasolina (1)
MeioAmbiente (1)
Grunt (1)
biologia (1)
programming (22)
performance (3)
brain (1)
smartphones (1)
telefonia (1)
privacidade (1)
opensource (3)
microg (1)
iode (1)
ssh (3)
zsh (2)
terminal (3)
dracula (1)
spaceship (1)
mac (2)
idiomas (1)
laptop (2)
developer (37)
api (5)
data (1)
matematica (1)
seguranca (2)
100DaysOfCode (9)
hotfix (1)
documentation (1)
laravelphp (10)
RabbitMQ (3)
Elasticsearch (1)
redis (2)
Raspberry (4)
Padrao de design (4)
JQuery (1)
angularjs (4)
Dicas (43)
Kubernetes (3)
vscode (2)
backup (1)
angular (3)
servers (2)
pipelines (1)
AppSec (1)
DevSecOps (4)
rust (1)
RustLang (1)
Mozilla (1)
algoritimo (1)
sqlite (1)
Passport (2)
jwt (5)
security (2)
translate (1)
kube (2)
iot (1)
politica (2)
bolsonaro (1)
flow (1)
podcast (1)
Brasil (1)
containers (3)
traefik (1)
networking (1)
host (1)
POO (2)
microservices (2)
bug (1)
cqrs (1)
arquitetura (3)
Architecture (4)
sail (3)
militar (1)
artigo (1)
economia (1)
forcas armadas (1)
ffaa (1)
autenticacao (2)
autorizacao (2)
authentication (4)
authorization (3)
NoCookies (1)
wsl (4)
memcached (1)
macos (2)
unix (2)
kali-linux (1)
linux-tools (5)
apple (1)
noticias (2)
composer (1)
rancher (1)
k8s (1)
escopos (1)
orm (1)
jenkins (4)
github (5)
gitlab (3)
queue (1)
Passwordless (1)
sonarqube (1)
phpswoole (1)
laraveloctane (1)
Swoole (1)
Swoole (1)
octane (1)
Structurizr (1)
Diagramas (1)
c4 (1)
c4-models (1)
compactar (1)
compression (1)
messaging (1)
restfull (1)
eventdrive (1)
services (1)
http (1)
Monolith (1)
microservice (1)
historia (1)
educacao (1)
cavalotroia (1)
OOD (0)
odd (1)
chatgpt (1)
openai (3)
vicuna (1)
llama (1)
gpt (1)
transformers (1)
pytorch (1)
tensorflow (1)
akitando (1)
ia (1)
nvidia (1)
agi (1)
guard (1)
multiple_authen (2)
rpi (1)
auth (1)
auth (1)
livros (2)
ElonMusk (2)
Oh My Zsh (1)
Manjaro (1)
BigLinux (2)
ArchLinux (1)
Migration (1)
Error (1)
Monitor (1)
Filament (1)
LaravelFilament (1)
replication (1)
phpfpm (1)
cache (1)
vpn (1)
l2tp (1)
zorin-os (1)
optimization (1)
scheduling (1)
monitoring (2)
linkedin (1)
community (1)
inteligencia-artificial (2)
wsl2 (1)
maps (1)
API_KEY_GOOGLE_MAPS (1)
repmgr (1)
altadisponibilidade (1)
banco (1)
modelagemdedados (1)
inteligenciadedados (4)
governancadedados (1)
bancodedados (2)
Observability (1)
picpay (1)
ecommerce (1)
Curisidades (1)
Samurai (1)
KubeCon (1)
GitOps (1)
Axios (1)
Fetch (1)
Deepin (1)
vue (4)
nuxt (1)
PKCE (1)
Oauth2 (2)
webhook (1)
TypeScript (1)
tailwind (1)
gource (2)