【问题标题】:count(): Parameter must be an array or an object that implements Countable in Laravel 6count():参数必须是数组或对象,在 Laravel 6 中实现了 Countable
【发布时间】:2020-03-02 16:36:43
【问题描述】:

我想将多个表中的数据显示到一个视图中,第一个表是Transaction_in,第二个表是Transaction_in_detail,但除了这两个表之外,还涉及其他表。

这是 Transcation_in 控制器

class Transactions_inController extends Controller
{
public function show($id)
    {
        $supplierList = Supplier::where('id', 'nama')->first();
        $transactionin = Transaction_in::where('id', $id)->first();
        $deviceTypeList = DeviceType::where('id', 'nama_tipe_device')->first();
        $deviceBrandList = DeviceBrand::where('id', 'nama_brand_device')->first();
        $transactionindetail = Transaction_in_detail::where('id', 'Transansaction_in_id')->first();
        //return view('transactionsin.show', compact('supplierList', 'transactionsin', 'deviceTypeList', 'deviceBrandList', 'transactionindetail'));
        return view('transactionsin.show')->with('transactionsin', $transactionin);
        return view('transactionsin.show')->with('transactionsindetail', $transactionindetail);   
    }
}

Transaction_in 模型

class Transaction_in extends Model
{
    protected $guarded = [];
    public function get_suppliers()
    {
        return $this->belongsTo(Supplier::class, 'Supplier_id');
    }
    public function get_devicetypes()
    {
        return $this->belongsToMany(DeviceType::class, 'DeviceType_id');
    }
    public function get_devicebrands()
    {
        return $this->belongsToMany(DeviceBrand::class, 'DeviceBrand_id');
    }
    public function get_transactionindetail()
    {
        return $this->belongsToMany(Transaction_in_detail::class, 'Transaction_in_id');
    }
}

Transaction_in_detail 模型

class Transaction_in_detail extends Model
{
    protected $guarded = [];
    public function get_transction_in_id()
    {
        return $this->belongsTo(Transaction_in::class, 'Transaction_in_id');
    }
    public function get_devicetypes()
    {
        return $this->belongsToMany(DeviceType::class, 'DeviceType_id');
    }
    public function get_devicebrands()
    {
        return $this->belongsToMany(DeviceBrand::class, 'DeviceBrand_id');
    }
}

我想将Transaction_in_detail 表中的数据显示到Transaction_in 控制器,但是我有这个错误

count():参数必须是数组或者实现的对象 可数(查看: C:\xampp\htdocs\inventory\resources\views\transactionsin\show.blade.php)

这是transactionsin.show 代码https://hastebin.com/ilewesucej.xml

【问题讨论】:

    标签: php laravel laravel-6 php-7.3


    【解决方案1】:

    1. 您正在使用 first() 方法返回单个 object ,而不是数组。 first() 方法不是返回模型集合,而是返回单个模型实例。重写你的代码如下 -

    $transactionin = Transaction_in::where('id', $id)->get();
    

    供参考,Laravel Docs

    2. 您不必两次返回视图和变量。返回一次如下 -

    return view('transactionsin.show',compact('transactionsin','transactionsindetail'));
    

    【讨论】:

      【解决方案2】:

      您的表设置是什么样的,具体来说Transaction_inTransaction_in_detail 之间的关系是什么? Transaction_in_detail::get_transaction_in_id 中给出了一对多关系,Transaction_in::get_transactionindetail 中给出了多对多关系。

      belongsToMany 关系适用于具有数据透视表的多对多关系。也许这应该是hasMany

      首先要正确阐明这种关系。见the docs on relationships in Laravel。然后你可以提取正确的数据。


      您是否要获取一个 ID 为 $idTransaction_in 实例?在那种情况下,不,你不能迭代它。也许你正在尝试这样的事情?

      $transactionin = Transaction_in::find($id);
      $transactionindetail = $transactionin->get_transactionindetail;
      
      // $transactionindetail will now be a `Collection` which implements `Countable`.
      

      另请注意,您(以及其他一些答案)混淆了transactionsintransactionin(没有“s”)。

      【讨论】:

        【解决方案3】:

        您无需返回查看两次。使用 compact 设置多个变量。

        public function show($id)
        {
            $supplierList = Supplier::where('id', 'nama')->first();
            $transactionin = Transaction_in::where('id', $id)->first();
            $deviceTypeList = DeviceType::where('id', 'nama_tipe_device')->first();
            $deviceBrandList = DeviceBrand::where('id', 'nama_brand_device')->first();
            $transactionindetail = Transaction_in_detail::where('id', 'Transansaction_in_id')->first();
            //return view('transactionsin.show', compact('supplierList', 'transactionsin', 'deviceTypeList', 'deviceBrandList', 'transactionindetail'));
            return view('transactionsin.show',compact('transactionsin','transactionsindetail'));
        }
        

        在刀片文件中检查 empty 条件。

        @if (!empty($transactionsin))
            <div class="tale-responsive">
                <table class="table table-hover table-bordered">
                    <thead align="center">
                        <tr class="table-primary">
                            <th>Tipe Perangkat</th>
                            <th>Brand Perangkat</th>
                            <th>Spesifikasi</th>
                            <th>Jumlah</th>
                            <th>Harga</th>
                            <th>Total Harga</th>
                        </tr>
                    </thead>
                    <tbody>
        
                        <tr>
                            <td>{{ $transactionin->get_devicetypes->nama_tipe_device }}</td>
                            <td>{{ $transactionin->get_devicebrands->nama_brand_device }}</td>
                            <td>{{ $transactionin->get_transactionindetail->spek_device }}</td>
                            <td>{{ $transactionin->get_transactionindetail->harga_device }}</td>
                            <td>{{ $transactionin->get_transactionindetail->jumlah_device }}</td>
                            <td>{{ $transactionin->get_transactionindetail->total_harga_device }}</td>
                        </tr>
        
                    </tbody>
                </table>
            </div>
        @else
            <h6>No Data Found</h6>
        @endif
        

        【讨论】:

        • 你的答案确实删除了答案,但我得到另一个错误Trying to get property 'get_devicetypes' of non-object (View: C:\xampp\htdocs\inventory\resources\views\transactionsin\show.blade.php) devicetype 保存在Transaction_in_detail 而不是Transaction_in 这是迁移表hastebin.com/ocosonuyal.php
        • 这个错误来自{{ $tdin-&gt;get_devicetypes-&gt;nama_tipe_device }}这一行是否Transaction_inget_devicebrands功能?
        • 您可以将其删除,因为使用 ternary operator 执行该代码为 {{ $tdin-&gt;get_devicetypes-&gt;nama_tipe_device ?? '' }}
        • 我将transactionsin 内的transactionsindetail 更改为if..else 现在我认为可能可行,但它给了我这个错误Cannot end a section without first starting one. (View: C:\xampp\htdocs\inventory\resources\views\transactionsin\show.blade.php)
        • 删除 foreach 循环,但您只会获得第一条记录。我已经编辑了我的答案,请检查它。
        【解决方案4】:

        如果你想让对象可数,你必须使用$object-&gt;count()在你的情况下$transactionin-&gt;count()

        【讨论】:

          猜你喜欢
          • 2018-09-22
          • 2019-05-10
          • 2018-06-28
          • 2018-07-24
          • 2020-04-27
          • 2019-08-03
          • 2018-06-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多