了解laravel关系及其用法

时间:2017-12-29 23:50:18

标签: php laravel

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

我很乐意,如果有人会纠正我,并告诉我如何纠正我的错误,而不是我不理解的事情。

我会遇到一个问题,并告诉我如何理解这一点并且有效,并且如果我错了,请纠正我。

所以,我的问题是:

我有这个单学期的最终项目 - e-commerces网站。 我现在遇到一个问题,我的视图控制器无法理解我想要使用的变量。

我现在就全力以赴。

所以,我有两张桌子用于获取我在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();
        });

此表引用了与主类别表相关联的字段,但现在这并不重要。

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

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();
        });

如您所见,我在子类别表中引用了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,);
    }
}

我希望我做对了 - 我有一个函数优先级来创建对子类别表的引用。纠正我,如果我错了(preces::class,'apakskategorijas_id') - 这段代码显示我使用preces类,我通过列'apakskategorijas_id'引用这个子类别类,从货物表到子类别表引用。

这里是我的商品课程

class preces extends Model
{
    public function apakskategorija()
    {
        $this->belongsTo('apakskategorijas');
    }
}

我告诉我,这个类因为引用属于子类别表,所以它会知道我来自哪里等等。

现在出现了我最挣扎的部分,以前信息的使用,如何使用它来从商品表中获得每件商品。

我的控制器有一条路线,它将获得子类别的ID,并且在关系的帮助下将返回所有商品。

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

任何帮助将不胜感激。谢谢

2 个答案:

答案 0 :(得分:0)

在你的模特中

library(rJava)
Error : .onLoad failed in loadNamespace() for 'rJava', details:
  call: inDL(x, as.logical(local), as.logical(now), ...)
  error: unable to load shared object 'C:/Users/Taqwa/Documents/R/win-library/3.1/rJava/libs/x64/rJava.dll':
  LoadLibrary failure:  The specified module could not be found.

Error: package or namespace load failed for ‘rJava’
> library(xlsx)
Loading required package: rJava
Error : .onLoad failed in loadNamespace() for 'rJava', details:
  call: inDL(x, as.logical(local), as.logical(now), ...)
  error: unable to load shared object 'C:/Users/Taqwa/Documents/R/win-library/3.1/rJava/libs/x64/rJava.dll':
  LoadLibrary failure:  The specified module could not be found.

Error: package ‘rJava’ could not be loaded
> raw23370 <- read.xlsx("C:\\Users\\Taqwa\\Desktop\\stations\\stations\\23370.xlsx",1)
Error: could not find function "read.xlsx"
> out <- createWorkbook()
Error: could not find function "createWorkbook"
> three_d_array <- array(0,dim = c(92, 6, 600))
> #options(java.parameters = "-Xmx1000m")
> for (i in 1:600){
+   candy = 1:nrow(raw23370)
+   
+   B=sample(candy,nrow(raw23370) , replace=T)
+   
+   a=raw23370[B,]
+   assign(paste0("sheet", i), createSheet(wb = out, sheetName = as.character(i)))
+   # you don't really need your three_d_array
+   addDataFrame(x = a, sheet = eval(as.name(paste0("sheet", i))))
+ }
Error in nrow(raw23370) : object 'raw23370' not found
> saveWorkbook(out, "C:\\Users\\Taqwa\\Desktop\\stations\\23370_output.xlsx")
Error: could not find function "saveWorkbook"

在您的控制器中

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

这将返回$ id的子类别,其中包含属于子类别$ id的所有商品。

在你的视图中

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

    return view ('prece.preces',compact('apakskat'));
}

我希望这会有用:)

答案 1 :(得分:0)

enter image description here

当我{{dd($apakskat->toArray())}}时,它显示了子类别及其项目,优先级。但仍然说Property [prece] does not exist on this collection instance.