在laravel中加入查询,并将数据操作发送到视图

时间:2016-02-21 23:05:15

标签: laravel join view php-carbon

我有2个表,usersprofiledetails

我可以运行加入查询并访问数据并发送到视图。

但是当我操纵这个领域的时候,他们会去做一些事情。 profiledetails表中的(日期格式)。没有成功,请检查以下代码,

webpagesConroller

$users = DB::table('users')
        ->join('profiledetails', 'users.id', '=', 'profiledetails.user_id')  
        ->select('users.*', 'profiledetails.dob')
        ->get();
    $age = $users->dob->diffInYears(Carbon::now());         
    return view('webpages.index',compact('users'))->with($age);

View:

<li class="cate_head">Age : {{ $age}}</li>

错误:

Trying to get property of non-object

我有模型Profiledetails添加了以下的mutator,

  public function getAge(){

       return $this->dob->diffInYears(Carbon::now());            

    }

    public function getDOB(){
        return $this->dob->format('d-m-Y');
    }

我是否可以在Ex-webpagesController的其他控制器上使用此方法,如果是,如何。

1 个答案:

答案 0 :(得分:0)

由于您使用的是原始查询,因此返回的数据不是对象,而是包含数据的数组。

此外,您没有限制查询,这意味着它可以返回多行。 您可能需要将$ users中的数据作为:

//with the possibily of multiple rows. Index is the row which has to be used
$users[index]['dob']

//when you are sure it only returns one row
$users[0]['dob'] // or $users['dob'] not sure as of the moment

您想检查与碳的差异。 因此,您可能需要制作dob结果的Carbon对象并将其与Carbon :: now进行核对。

$age = Carbon::createFromFormat('Y-m-d', $users[0]['dob'])->diffForHumans();      
// diffForHumans() uses the local time 

请注意,这只会获得一行的年龄(索引或第一行,因为[0])。

如果您想为每一行执行此操作,请使用for或foreach为每个$ user设置$ users-&gt;年龄。但由于这些不是对象/模型而是原始数据,因此不起作用。

希望这有助于你的问题