前言
众所周知Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。下面这篇文章主要给大家总结了一些Laravel不经常用的小技巧,下面话不多说了,来一起看看详细的介绍吧
1. 更新父表的timestamps
如果你想在更新关联表的同时,更新父表的timestamps,你只需要在关联表的model中添加touches属性。
比如我们有Post和Comment两个关联模型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
/**
* 要更新的所有关联表
*
* @var array
*/
protected $touches = [ 'post' ];
/**
* Get the post that the comment belongs to.
*/
public function post()
{
return $this ->belongsTo( 'App\Post' );
}
}
|
2. 懒加载指定字段
1
|
$posts = App\Post::with( 'comment:id,name' )->get();
|
3. 跳转指定控制器并附带参数
1
|
return redirect()->action( 'SomeController@method' , [ 'param' => $value ]);
|
4. 关联时使用withDefault()
在调用关联时,如果另一个模型不存在,系统会抛出一个致命错误,例如 $comment->post->title,那么我们就需要使用withDefault()
1
2
3
4
5
|
...
public function post()
{
return $this ->belongsTo(App\Post:: class )->withDefault();
}
|
5. 两层循环中使用$loop
在blade的foreach中,如果你想获取外层循环的变量
1
2
3
4
5
6
7
|
@ foreach ( $users as $user )
@ foreach ( $user ->posts as $post )
@ if ( $loop ->parent->first)
This is first iteration of the parent loop.
@ endif
@ endforeach
@ endforeach
|
6. 浏览邮件而不发送
如果你使用的是mailables来发送邮件,你可以只展示而不发送邮件
1
2
3
4
|
Route::get( '/mailable' , function () {
$invoice = App\Invoice::find(1);
return new App\Mail\InvoicePaid( $invoice );
});
|
7. 通过关联查询记录
在hasMany关联关系中,你可以查询出关联记录必须大于5的记录
1
|
$posts = Post::has( 'comment' , '>' , 5)->get();
|
8. 软删除
查看包含软删除的记录
1
|
$posts = Post::withTrashed()->get();
|
查看仅被软删除的记录
1
|
$posts = Post::onlyTrashed()->get();
|
恢复软删除的模型
1
|
Post::withTrashed()->restore();
|
9. Eloquent时间方法
1
2
3
4
5
|
$posts = Post::whereDate( 'created_at' , '2018-01-31' )->get();
$posts = Post::whereMonth( 'created_at' , '12' )->get();
$posts = Post::whereDay( 'created_at' , '31' )->get();
$posts = Post::whereYear( 'created_at' , date ( 'Y' ))->get();
$posts = Post::whereTime( 'created_at' , '=' , '14:13:58' )->get();
|
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。
原文链接:https://segmentfault.com/a/1190000018864880