count (): параметр должен быть массивом или объектом, который реализует Countable в Laravel 6 - PullRequest
1 голос
/ 06 ноября 2019

Я хочу отобразить данные из нескольких таблиц в одно представление, первая таблица - Transaction_in, а вторая таблица - Transaction_in_detail, но помимо этих двух других таблиц участвуют.

Это Transcation_in Controller

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 Controller, но у меня есть эта ошибка

count (): параметр должен быть массивом илиобъект, который реализует Countable (представление: C: \ xampp \ htdocs \ inventory \ resources \ views \ Transactionsin \ show.blade.php)

, и это transactionsin.show код https://hastebin.com/ilewesucej.xml

Ответы [ 4 ]

1 голос
/ 06 ноября 2019

1. Вы используете метод first(), который возвращает один объект , а не массив. Вместо того, чтобы возвращать коллекцию моделей, метод first() возвращает один экземпляр модели. Перепишите ваш код следующим образом -

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

Для справки: Документы Laravel

2. Вам не нужно возвращать представление и переменныедважды. Вернитесь один раз, как показано ниже -

return view('transactionsin.show',compact('transactionsin','transactionsindetail'));
1 голос
/ 06 ноября 2019

Как выглядит ваша таблица, в частности, как соотносятся Transaction_in и Transaction_in_detail? У вас есть отношение «один ко многим», данное в Transaction_in_detail::get_transaction_in_id, и отношение «многие ко многим», данное в Transaction_in::get_transactionindetail.

Отношение belongsToMany предназначено для отношений "многие ко многим" с помощью сводной таблицы. Может быть, вместо этого предполагается hasMany?

Начните с правильного разъяснения этих отношений. См. документы об отношениях в Laravel . Тогда вы можете получить правильные данные.


Вы пытаетесь получить ОДИН Transaction_in экземпляр с идентификатором $id? В этом случае нет, вы не можете перебрать его. Может быть, вы пытаетесь что-то вроде этого?

$transactionin = Transaction_in::find($id);
$transactionindetail = $transactionin->get_transactionindetail;

// $transactionindetail will now be a `Collection` which implements `Countable`.

Также обратите внимание, что вы (и некоторые другие ответы) смешиваете transactionsin и transactionin (без 's').

1 голос
/ 06 ноября 2019

Вам не нужно возвращать просмотреть два раза . используйте 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
0 голосов
/ 06 ноября 2019

если вы хотите сделать объект счетным, вы должны использовать $object->count() в вашем случае $transactionin->count()

...