Laravel约会不允许我使用diffForHumans

时间:2015-12-14 23:24:31

标签: php laravel laravel-5

让我的表设置时间戳字段,以便在字段中创建和更新。

在我的模型中,我这样做:

protected $dates = ['created_at', 'updated_at'];

但是在调用日期时:

$p->created_at->diffForHumans()

我得到了

Call to a member function diffForHumans() on string

我很确定这应该有效。我以前在不同型号上使用过相同的次数等,但这不起作用。

5 个答案:

答案 0 :(得分:5)

默认情况下,Eloquent会将created_at和updated_at列转换为Carbon实例,后者提供各种有用的方法,并扩展本机PHP DateTime类。

阅读:https://laravel.com/docs/5.1/eloquent-mutators#date-mutators

只需检查你的composer.json文件中的nesbot / carbon包。如果您没有,可以通过键入

进行安装
composer require nesbot/carbon

替代解决方案是,

您可以使用Carbon :: parse()动态创建对象。

Carbon::parse($p->created_at)->diffForHumans();

答案 1 :(得分:5)

我在5.2版中使用的Laravel diffForHumans()功能仅在您使用created_atupdated_at时有效,否则会为您带来Call to a member function diffForHumans() on string错误。即使您使用了created_atupdated_at,也请确保在您的迁移中,您还没有使用过:

$table->timestamp('created_at');
$table->timestamp('updated_at');

但你已经使用了

$table->timestamps();

根据laravel有所不同 但是,由于某些原因,您希望将diffForHumans()函数用于既不是created_at又不updated_at的列,例如 expired_at,使用碳

我总结的是:

  1. 您首先在laravel项目文件夹中创建一个名为Addon的新文件夹例如test-laravel
  2. 然后在文件夹中创建一个名为Carbon.php
  3. 的新文件
  4. Carbon.php文件内输入:
  5. namespace Carbon;
    
    class Carbon extends \DateTime{
        //
    }
    

    然后转到您的控制器,例如ProductController.php ,并将Carbon命名空间添加到文件中:

    namespace Addon;
    namespace App\Http\Controllers;
    
    use Carbon\Carbon;
    use ...
    
    class ProductController extends Controller{
       $expire_date_string = '2016-07-27 12:45:32';
       //  Parse date with carbon
       $carbonated_date = Carbon::parse($expire_date_string);
       //  Assuming today was 2016-07-27 12:45:32
       $diff_date = $carbonated_date->diffForHumans(Carbon::now());
       echo $diff_date; // prints "1 month after"
    }
    

    有关碳控制器的更多信息,请访问:http://carbon.nesbot.com/docs/

答案 2 :(得分:2)

对于既不是created_at的列也不需要使用Carbon,而update_at只需将新列(如expired_at)添加到模型中:

public ResponseEntity<ImageToken> postImage(@RequestPart("image") final MultipartFile file) {

然后你可以使用 - &gt; diffForHumans();

https://laravel.com/docs/5.3/eloquent-mutators#date-mutators

答案 3 :(得分:0)

您必须使用<tbody ng-controller="ProductsCtrl"> <tr ng-repeat="product in products | orderBy: 'category'"> <td>{{ product.category}}</td> <td>{{ product.task}}</td> <td><img class="user" src="{{ product.user }}"></td> <td>{{ product.status }}</td> <td>{{ product.due | date:'MMMM dd' }}</td> <td>{{ product.notes }}</td> <td>{{ product.read }}<a class="fa fa-check" ng- click="markCompleted(product)"></a> <i class="fa fa-comment"></i> <i class="fa fa-bars"></i> </td> </tr> </tbody> ,如下所示:

Carbon

答案 4 :(得分:0)

如果在刀片视图中:

GestureDetector (
  onPanUpdate: (dis) {
    if (dis.delta.dx > 0) {
      //User swiped from left to right
    } else if (dis.delta.dx < 0) {
      //User swiped from right to left
    }
  }
  child: yourWidget,
)