前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel 9个不经常用的小技巧

Laravel 9个不经常用的小技巧

作者头像
猿哥
发布2019-04-24 10:29:22
7170
发布2019-04-24 10:29:22
举报
文章被收录于专栏:Web技术布道师Web技术布道师

1. 更新父表的timestamps

如果你想在更新关联表的同时,更新父表的timestamps,你只需要在关联表的model中添加touches属性。 比如我们有PostComment两个关联模型

代码语言:javascript
复制
<?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. 懒加载指定字段

代码语言:javascript
复制
$posts = App\Post::with('comment:id,name')->get();

3. 跳转指定控制器并附带参数

代码语言:javascript
复制
return redirect()->action('SomeController@method', ['param' => $value]);

4. 关联时使用withDefault()

在调用关联时,如果另一个模型不存在,系统会抛出一个致命错误,例如 $comment->post->title,那么我们就需要使用withDefault()

代码语言:javascript
复制
...
public function post()
{
    return $this->belongsTo(App\Post::class)->withDefault();
}

5. 两层循环中使用$loop

bladeforeach中,如果你想获取外层循环的变量

代码语言:javascript
复制
@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来发送邮件,你可以只展示而不发送邮件

代码语言:javascript
复制
Route::get('/mailable', function () {
    $invoice = App\Invoice::find(1);
    return new App\Mail\InvoicePaid($invoice);
});

7. 通过关联查询记录

hasMany关联关系中,你可以查询出关联记录必须大于5的记录

代码语言:javascript
复制
$posts = Post::has('comment', '>', 5)->get();

8. 软删除

查看包含软删除的记录

代码语言:javascript
复制
$posts = Post::withTrashed()->get();

查看仅被软删除的记录

代码语言:javascript
复制
$posts = Post::onlyTrashed()->get();

恢复软删除的模型

代码语言:javascript
复制
Post::withTrashed()->restore();

9. Eloquent时间方法

<span type="button" created_at',="" '2018-01-31')-="" style="box-sizing: border-box;">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();" title="">

代码语言:javascript
复制
$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();
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PHP技术大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 更新父表的timestamps
  • 2. 懒加载指定字段
  • 3. 跳转指定控制器并附带参数
  • 4. 关联时使用withDefault()
  • 5. 两层循环中使用$loop
  • 6. 浏览邮件而不发送
  • 7. 通过关联查询记录
  • 8. 软删除
  • 9. Eloquent时间方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档