gpt4 book ai didi

php - 如何修复它在 laravel 5.3 中调用字符串的成员函数 diffForHumans()

转载 作者:可可西里 更新时间:2023-11-01 13:39:47 25 4
gpt4 key购买 nike

为什么当我使用查询生成器而不是函数 diffForHumans () 时出现错误,但是如果我使用 ELoquent ROM 但没有错误有办法克服它吗? (我该如何解决)谢谢

diffForHumans()

这是ArticlesController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Article;
use Carbon\Carbon;
use Auth;
use DB;

class ArticlesController extends Controller
{

public function index()
{
$articles =DB::table('articles')->get();
$articles = ['articles'=>$articles];
return view('articles.index',$articles);
}
}

这是模型 Article.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\SoftDeletes;

class Article extends Model
{
//
use SoftDeletes ;

protected $fillable = [
'user_id','content','live','post_on',
];

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

public function setLiveAttribute($value)
{
$this->attributes['live'] = (boolean)($value);
}

public function getShortContentAttribute()
{
return substr($this->content,0,random_int(60,150))."...";
}

public function setPostOnAttribute($value)
{
$this->attributes['post_on'] = Carbon::parse($value);
}

public function setCreatedAtAttribute($value)
{
$this->attributes['post_on'] = Carbon::parse($value);
}



}

这是我的代码,我该如何修复它?谢谢

最佳答案

我注意到你的代码中有几件事,

  • 无需将 created_atupdated_at 转换为日期,它们已经被转换并且是 Carbon 的实例
  • 您可以使用属性 $casts 来转换简单的属性,例如 live
  • 无需为 post_on 日期添加突变器,因为您将其添加到 $dates
  • 您还在 created_at 而不是 post_on 上设置了一个修改器,您使用了 SetCreatedAttribute 而不是 setPostOnAttribute<
  • 而不是 substr($this->content,0,random_int(60,150))."..." 你可以使用 Laravel 的 str_limit 辅助函数,也将 random_int 更改为 rand => int rand ( int $min , int $max )

查询生成器返回 dates 作为字符串,你需要在使用它们之前进行解析,否则你会得到这样的错误 PHP error: Call to a member function on string,就像这样:

\Carbon\Carbon::parse(\DB::table('articles')->first()->post_on)->diffForHumans()

你可以像这样简化你的模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Article extends Model
{
use SoftDeletes ;

protected $fillable = [
'user_id','content','live','post_on',
];

protected $dates = [
'post_on','deleted_at'
];

protected $casts = [
'live' => 'boolean'
];

public function getShortContentAttribute()
{
return str_limit($this->content, rand(60,150));
}
}

你也可以像这样简化你的 index 方法:

public function index()
{
$articles = DB::table('articles')->get();

return view('articles.index', compact('articles'));
}

关于php - 如何修复它在 laravel 5.3 中调用字符串的成员函数 diffForHumans(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45620330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com