【问题标题】:How to solve Trying to get property of non-object in Laravel?如何解决试图在 Laravel 中获取非对象的属性?
【发布时间】:2017-03-02 02:42:49
【问题描述】:

我有一个主表门票,其中包含另一个名为 ticket_statuses 的表的外键。我想根据外键显示来自ticket_statuses的状态字段。

TicketsController.php

<?php

namespace App\Http\Controllers\Users;

use App\Http\Requests;
use App\Http\Controllers\Controller;

use App\Ticket;
use App\TicketStatus;
use App\Models\User;
etc...

class TicketsController extends UserController
{

public function index()
{
    $tickets = Ticket::paginate(25);

    return view('user.tickets.index', compact('tickets'));
}

}

Ticket.php

class Ticket extends Model
{

    // Ticket __belongs_to__ User
    public function user()
    {
        return $this->belongsTo('App\Models\User');
    }

    public function ticketstatus()
    {
        return $this->belongsTo('App\TicketStatus');
    }



}

TicketStatus.php

class TicketStatus extends Model
{
    // Ticket Status __has_many__ Ticket
    public function tickets()
    {
        return $this->hasMany('Ticket');
    }

}

index.blade.php

@foreach($tickets as $item)
    <tr>
        <td>{{ $item->ticket_statuses->status }}</td>
        <td>{{ $item->customer }}</td>
        <td>{{ $item->user->first_name }} {{ $item->user->last_name }}</td>
        <td>

            {!! Form::close() !!}
        </td>
    </tr>
@endforeach

由于 {{ $item->ticket_statuses->status }} 行,我收到错误消息。我也试过 {{ $item->ticketstatus->status }} 错误是尝试获取非对象的属性

请帮忙。谢谢

【问题讨论】:

  • tickets 表中的列名是什么?
  • id、主题、customer_id、user_id、_ticket_status_id
  • 在下面查看我的答案。我认为是 _ticket_status_id 导致了这个错误。

标签: php html mysql css laravel


【解决方案1】:

正如你在cmets中提到的,改变

public function ticketstatus()
{
   return $this->belongsTo('App\TicketStatus');
}

public function ticketstatus()
{
   return $this->belongsTo('App\TicketStatus', '_ticket_status_id', 'id');
}

然后使用{{ $item-&gt;ticketstatus-&gt;status }} 重试。当您使用 _ticket_status_id 时,laravel 会在您的 tickets 表中查找 ticket_status_id 列。

让我们知道它是否有帮助。

【讨论】:

  • @mahfuzuk 我刚回来,因为我被分配到另一个项目。但我真的为你的伟大而赞美你。你是大师。
【解决方案2】:

如果您的$item 可能没有ticket_statuses,您可能需要在显示它们之前进行检查。

<td>{{ isset($item->ticketstatus) ? $item->ticket_statuses->status  : '' }}</td>

或使用 Laravel Blade 速记

<td>{{ $item->ticketstatus->status or "default message" }}</td>

【讨论】:

  • 因为 {{ isset($item->ticket_statuses) 我没有得到任何值? $item->ticket_statuses->status : '' }}.. 嗯..
  • 您可以尝试使用 $item->ticketstatus 吗?如果仍然不起作用,请尝试 dd($item) 并向我们展示
【解决方案3】:

您在 Ticket 模型中的关系名称是 ticketstatus,并且您正在尝试使用 ticket_statuses 获取数据,完全错误,尝试使用您的关系名称,如下所示

$item->ticketstatus->status

【讨论】:

  • 嗨。 $item->ticketstatus->status 仍然错误.. 我想知道我还需要通过控制器扩展
  • 可能是您在ticketStatus 表中保留了错误的外键。您在ticketstatus 表中使用了什么外键?
猜你喜欢
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
  • 2020-02-23
  • 1970-01-01
  • 2020-03-01
  • 2015-08-19
  • 2018-02-21
相关资源
最近更新 更多