【问题标题】:Error in showing laravel data to blade using eloquent使用 eloquent 向刀片显示 laravel 数据时出错
【发布时间】:2021-05-19 10:28:08
【问题描述】:

我有这个承包商模型

public function ContractorDetails()
{
    return $this->hasOne(ContractorDetails::class)->select('id', 'contractors_id');
} 

和 ContractorDetails 模型

  public function Contractors()
    {
        return $this->belongsTo(Contractors::class);
    }  

我可以检索承包商模型下的所有列,但是每当我这样做 $contractors->ContractorDetails->id 时,它都会显示此错误 “尝试获取属性 'id'非对象” 。但是当我只使用这个 $contractors->ContractorDetails 时,它能够显示这个集合 {"id":6,"contractors_id":24}

我的控制器是这样的

**$contractors = Contractors::orderby('name')->with('ContractorDetails')->get();**

我的刀片文件

        <tbody> 
            @foreach($contractors as $contractor)
            <tr class="bg-white lg:hover:bg-gray-100 flex lg:table-row flex-row lg:flex-row flex-wrap lg:flex-no-wrap mb-10 lg:mb-0">
                <td class="w-full lg:w-auto p-3 text-gray-800 text-center border border-b block lg:table-cell relative lg:static">
                    <span class="lg:hidden absolute top-auto left-0 bg-blue-200 px-1 py-1 text-xs font-bold"> Contractor Name</span>
                       {{ $contractor->name }}
                </td>
                <td class="w-full lg:w-auto p-3 text-gray-800 text-center border border-b text-center block lg:table-cell relative lg:static">
                    <span class="lg:hidden absolute top-auto left-0  bg-blue-200 px-1 py-1 text-xs font-bold">Status</span>
                    <span class="{{$contractor->status == 0 ? 'px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-yellow-100 text-green-800' : 'px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800' }}"> {{$contractor->status == 0 ? 'onHold' : 'Approved' }}</span>
                </td>

                <td class="w-full lg:w-auto p-3 text-gray-800 text-center border border-b text-center block lg:table-cell relative lg:static">
                    <span class="lg:hidden absolute top-auto left-0  bg-blue-200 px-1 py-1 text-xs font-bold">Actions</span>
                    <x-jet-button wire:click="{{ route('ContractorID', [$contractor->ContractorDetails->id])}}" wire:loading.attr="disabled">
                        {{ __('EDIT') }}
                        </x-jet-danger-button>
                        <x-jet-danger-button wire:click="confirmContractorDeletion( {{$contractor->id }})" wire:loading.attr="disabled">
                            {{ __('Delete') }}
                        </x-jet-danger-button>

                </td>
            </tr>
            @endforeach
        </tbody>

任何帮助将不胜感激

【问题讨论】:

    标签: php laravel eloquent laravel-blade


    【解决方案1】:

    尝试先检查如下:

    isset($contractors->ContractorDetails->id) ? $contractors->ContractorDetails->id : 'No result found'
    

    您可能会遇到没有contractorDetails的情况。

    【讨论】:

    • 嗨,开发者。是的,它已经有承包商的详细信息。我也尝试过 dd $contractors。 id 和contractors_id 正在显示。不太确定我在哪里犯了错误。
    • 我已经在上面添加了我的刀片文件。
    【解决方案2】:

    找到了解决办法。

    我在承包商模型下创建另一个函数

    public function getContractorDetailsAttribute()
    {
        return $this->ContractorDetails()->pluck('id')->first();
    }
    

    现在我可以使用这个从 ContractorDetails 模型中获取 ID

    $contractors->ContractorDetails
    

    【讨论】:

      猜你喜欢
      • 2018-09-12
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-07
      • 2023-01-08
      • 1970-01-01
      • 2020-01-27
      相关资源
      最近更新 更多