Как создать отношения hasMany в Laravel 6 - PullRequest
0 голосов
/ 13 января 2020

Я использую Laravel 6, и я хочу установить связь hasMany между моделью Layanan и моделью Objek

Модель Layanan

class Layanan extends Model
{
    protected $fillable = ['nama_layanan'];
    protected $primaryKey = 'layanans_id';

    public function objeks()
    {
        return $this->hasMany(Objek::class);
    }
}

Модель Objek

class Objek extends Model
{
    protected $fillable = ['layanan_id', 'tipe_objeks'];
    protected $primaryKey = 'objeks_id';

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

Контроллер. php

class ObjekController extends Controller
{
    public function object()
    {
        $objek = \App\Objek::all();

        return view('pages.alat.object.object')->with('data', $objek);
    }
}

Вид

@foreach ($data as $item)
    @foreach ($item->layanan as $layanan)
        <tr>
            <td>{!! $item->objeks_id !!}</td>
            <td>{!! $layanan->layanan_id !!},</td>
            <td>{!! $item->tipe_objeks !!}</td>
            <td>{!! $item->created_at->format('d/m/Y') !!}</td>
            <td>{!! $item->updated_at->format('d/m/Y') !!}</td>
        </tr>
    @endforeach
@endforeach

Я получаю ошибку

В foreach указан неверный аргумент ()

Что я сделал не так? Иногда говорится, что «layanan» не является объектом.

Ответы [ 3 ]

0 голосов
/ 13 января 2020

когда вы определяете отношения, для id будет использоваться PK , поэтому рекомендуется определить FK и PK , как показано ниже

class Layanan extends Model
{
    protected $fillable=[
        'nama_layanan'
    ];

    protected $primaryKey = 'layanans_id';

    public function objeks() {
        return $this->hasMany('App\Objek', 'layanan_id', 'layanans_id');
    }
}

, тогда вам нужно использовать ЕСЛИ ()

@foreach ($data as $item) 
   @if(isset($item->layanan))  ////    @if($item->layanan && is_array($item->layanan))  or   @if(count($item->layanan) > 0)         
   @foreach ($item->layanan as $layanan)

   @endforeach
   @endif
@endforeach

ОБНОВЛЕНИЕ

в соответствии с вашими отношениями, если вы берете данные из Objek , тогда используйте вот так

@foreach ($data as $item) 

       <tr>
            <td>{!! $item->objeks_id !!}</td>
            <td>{!! $item->layanan->layanans_id !!},</td>
            <td>{!! $item->tipe_objeks !!}</td>
            <td>{!! $item->created_at->format('d/m/Y') !!}</td>
            <td>{!! $item->updated_at->format('d/m/Y') !!}</td>
        </tr>


@endforeach
0 голосов
/ 13 января 2020

Просто обновите свой вид, как показано ниже, чтобы добавить, если существует условие, чтобы проверить, существуют ли значения отношений для каждой записи.

@foreach ($data as $item)
    @if($item->layanan->count())
        @foreach ($item->layanan as $layanan)
            <tr>
                <td>{!! $item->objeks_id !!}</td>
                <td>{!! $layanan->layanan_id !!},</td>
                <td>{!! $item->tipe_objeks !!}</td>
                <td>{!! $item->created_at->format('d/m/Y') !!}</td>
                <td>{!! $item->updated_at->format('d/m/Y') !!}</td>
            </tr>
        @endforeach
    @endif
@endforeach
0 голосов
/ 13 января 2020
class Objek extends Model
{
    protected $fillable=[
        'layanan_id', 'tipe_objeks'
    ];
    protected $primaryKey = 'objeks_id';

    public function layanan() {
        return $this->hasMany(Layanan::class,'layanan_id','layanan_id');
    }
}

если вы поставите Objek hasMany layanan

, то только вы можете l oop на 1 ряд Objek

как $data = Objek::find(1(=);

foreach($data as $layanan)

...