Php 理解laravel关系及其用法

Php 理解laravel关系及其用法,php,laravel,Php,Laravel,我在laravel中遇到了一些关于关系的问题,以及如何使用它们从这些数据库表中获取信息 如果有人能纠正我,告诉我如何纠正我的错误,使之成为我不理解的东西,我会很高兴。 我将讨论我遇到的一个问题,并告诉我如何理解这一点和那一点,如果我错了,请纠正我。 Schema::create('preces', function (Blueprint $table) { $table->increments('id'); $table->string

我在laravel中遇到了一些关于关系的问题,以及如何使用它们从这些数据库表中获取信息

如果有人能纠正我,告诉我如何纠正我的错误,使之成为我不理解的东西,我会很高兴。

我将讨论我遇到的一个问题,并告诉我如何理解这一点和那一点,如果我错了,请纠正我。

Schema::create('preces', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nosaukums');
            $table->decimal('cena');            
            $table->string('path');
            $table->integer('apakskategorijas_id')->unsigned()->index();
            $table->foreign('apakskategorijas_id')->references('id')->on('apakskategorijas');
            $table->timestamps();
        });
Route::get('kategorija/apakskategorija/preces/{id}','routes@preces');
所以,我的问题是:

我有这个大学学期的期末项目要做-电子商务网站。 我现在遇到了一个问题,我的视图控制器不理解我要使用的变量。

Schema::create('preces', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nosaukums');
            $table->decimal('cena');            
            $table->string('path');
            $table->integer('apakskategorijas_id')->unsigned()->index();
            $table->foreign('apakskategorijas_id')->references('id')->on('apakskategorijas');
            $table->timestamps();
        });
Route::get('kategorija/apakskategorija/preces/{id}','routes@preces');
我现在就去看看

所以,我有两个表,我用它们来获取我在DB中放置的货物

这是我的子类别表,我将从中获取每个子类别的商品

Schema::create('apakskategorijas', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nosaukums');
            $table->integer('kategorijas_id')->unsigned()->index();
            $table->foreign('kategorijas_id')->references('id')->on('kategorijas');
            $table->timestamps();
        });
class preces extends Model
{
    public function apakskategorija()
    {
        $this->belongsTo('apakskategorijas');
    }
}
此表引用了一个与主类别表连接的字段,但现在这并不重要

这是一张桌子,我在那里存放货物。

Schema::create('preces', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nosaukums');
            $table->decimal('cena');            
            $table->string('path');
            $table->integer('apakskategorijas_id')->unsigned()->index();
            $table->foreign('apakskategorijas_id')->references('id')->on('apakskategorijas');
            $table->timestamps();
        });
Route::get('kategorija/apakskategorija/preces/{id}','routes@preces');
如您所见,我引用了子类别表中的id字段。到目前为止还不错

现在,我已经为每个表创建了模型,在其中我放置了关系

这是我在模型中的子类别

class apakskategorijas extends Model
{
    //relācija ar modeli kategorijas
    public function kategorija()
    {
        return $this->belongsTo('kategorijas');


    }
    public function prece()
    {
        return $this->hasMany(preces::class,);
    }
}
我希望我做到了这一点——我有一个函数prec,可以创建对子类别表的引用。如果我错了,请纠正我。
(preces::class,'apakskategorijas_id')
-这段代码表明我使用了preces类,其中我通过列
'apakskategorijas_id'
引用了该子类别,该列从货物表引用到子类别表

这是我的商品的课程

Schema::create('apakskategorijas', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nosaukums');
            $table->integer('kategorijas_id')->unsigned()->index();
            $table->foreign('kategorijas_id')->references('id')->on('kategorijas');
            $table->timestamps();
        });
class preces extends Model
{
    public function apakskategorija()
    {
        $this->belongsTo('apakskategorijas');
    }
}
在这里,我告诉大家,这个类由于引用而属于子类别表,这样它就可以知道我来自哪里,等等

现在是我最难以处理的部分,使用以前的信息,如何使用它从商品表中获取每种商品。

Schema::create('preces', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nosaukums');
            $table->decimal('cena');            
            $table->string('path');
            $table->integer('apakskategorijas_id')->unsigned()->index();
            $table->foreign('apakskategorijas_id')->references('id')->on('apakskategorijas');
            $table->timestamps();
        });
Route::get('kategorija/apakskategorija/preces/{id}','routes@preces');
我的控制器有一条路线,该路线将获取子类别的id,并在关系的帮助下返回所有货物。

Schema::create('preces', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nosaukums');
            $table->decimal('cena');            
            $table->string('path');
            $table->integer('apakskategorijas_id')->unsigned()->index();
            $table->foreign('apakskategorijas_id')->references('id')->on('apakskategorijas');
            $table->timestamps();
        });
Route::get('kategorija/apakskategorija/preces/{id}','routes@preces');
这是控制器

public function preces($id)
    {
        $apakskat = apakskategorijas::with('prece')->get();

        $precess = preces::where('apakskategorija_id',$id)->get();

        return view ('prece.preces',compact('apakskat','precess'));
    }
在这里,我已经知道代码是如此错误,以至于很难看到。我想了解,在我看来,我现在如何利用以前提供的信息退货。据我所知,我需要创建一个变量,该变量引用一个函数,在这个函数中我创建了hasMany关系。但在那个函数中,我告诉过我将使用外键来创建子类别表。这可能就是我获取子类别id的方式,我需要从特定的子类别退货现在我不知道如何进一步工作。如何使用
$id
和我需要的所有其他内容?
它向我显示了一个错误,即我试图传递给视图的变量未定义

以下是我的观点

@foreach($apakskat as $prec)

    <div class="col-md-4 kat">

        <img src="{{ URL::to($prec->path) }}">        
        <p>{{$prec->nosaukums}}</p>
        <a href="{{ url('kategorija/apakskategorija/prece'.$prec->id) }}"><p>{{$prec->cena}}</p></a>

    </div>

    @endforeach
@foreach($apakskat作为$prec)
路径)}}“>
{{$prec->nosaukums}

@endforeach
任何帮助都将不胜感激。谢谢您的型号

class apakskategorijas extends Model
{
    public function kategorija()
    {
       return $this->belongsTo('kategorijas');
    }
    public function prece()
    {
        return $this->hasMany(preces::class);
    }
}
在控制器中

public function preces($id)
{
    $apakskat = apakskategorijas::where('id',$id)->with('prece')->get();

    return view ('prece.preces',compact('apakskat'));
}
这将返回$id的子类别以及属于子类别$id的所有商品

在你看来

@foreach($apakskat->prece as $prec) //this loops for foods.

<div class="col-md-4 kat">

    <img src="{{ URL::to($prec->path) }}">        
    <p>{{$prec->nosaukums}}</p>
    <a href="{{ url('kategorija/apakskategorija/prece'.$prec->id) }}"><p>
    {{$prec->cena}}</p></a>

</div>

@endforeach
@foreach($apakskat->prec as$prec)//这个循环用于食物。
路径)}}“>
{{$prec->nosaukums}

@endforeach
我希望这能奏效:)


当我执行
{{dd($apakskat->toArray())}}
时,它向我显示了子类别及其项prec。但是仍然说
属性[prec]在此集合实例上不存在。

不幸的是,它不存在。它仍然显示我传递给视图的变量没有定义。但是感谢您使用php artisan视图帮助清除缓存视图:clearOMG,我刚刚发现了问题。在查看代码大约2小时后,我发现我在以前使用的函数中调用了这个视图,这就是为什么它不起作用。该死,我对这件事感到很难过。现在,当我尝试调用@foreach($apakskat->prec as$prec)时,表示集合实例上不存在prec,谢谢