Php 如何在laravel中显示来自不同表的数据?

Php 如何在laravel中显示来自不同表的数据?,php,laravel,laravel-4,Php,Laravel,Laravel 4,术语表 术语识别码 名字 鼻涕虫 术语分类表 术语\u分类\u id 术语识别码 描述 我想显示所有记录,如“术语id、名称、描述 我的学期模型 public function TermTaxonomy(){ return $this->hasOne('TermTaxonomy'); } 我的分类模型 public function Term(){ return $this->belongsTo('Term'); } 我的路线 $term = new Te

术语表

  • 术语识别码
  • 名字
  • 鼻涕虫
术语分类表

  • 术语\u分类\u id
  • 术语识别码
  • 描述
我想显示所有记录,如“术语id、名称、描述

我的学期模型

public function TermTaxonomy(){
    return $this->hasOne('TermTaxonomy');
}
我的分类模型

public function Term(){
    return $this->belongsTo('Term');
}
我的路线

$term = new Term;
$categories = $term->all(['term_id', 'name']);
foreach($categories as $category){
    echo $category->term_id . " " . $category->name . " " . "description of term_id should here" ;} 
正在尝试此代码,但未定义属性时出错:Illumb\Database\Eloquent\Collection::$TermTaxonomy

$e = new Term;
$f = $e->all(['term_id','name']);
    echo $f->TermTaxonomy->description;
}
在上面的代码中,我想返回每个term_id的所有描述,但是我不明白为什么如果对象只有1,我可以显示描述,就像下面的代码一样

$a = new Term;
$b = $a->all(['term_id','name'])->find(8);
echo $b->TermTaxonomy->description . "<br>"; // work return description of $b;
$a=新术语;
$b=$a->all(['term_id','name'])->find(8);
echo$b->TermTaxonomy->description.“
”;//工作返回说明$b;
那么到底什么是一对一关系函数呢?当对象只有1时,一对一关系函数才起作用吗

在我的例子中呢?使用关系方法显示所有描述的逻辑是否错误?那么我必须做什么来显示术语id、名称和描述列表


提前感谢,我在laravel完全是新手。

如果你做一个
$e-all
,你会得到一个带有
术语taxanomies
的数组。当你做一个特定的搜索(
->find(8)
)时,你只会得到id=8的对象

您只需使用foreach或索引号即可:

$f = $e->all(['term_id','name']);
foreach($f as $tax){
    var_dump($tax);
}


我认为这应该行得通。

oops!看起来您正在尝试将原始php代码实现到Laravel中。请摆脱它,按照下面的说明操作

制作一条
路线

    Route::get('/term' , array('uses' => 'TermsController@showTerm'));
现在制作一个名为
TermsController.php
的控制器,并尝试以下操作:

       <?php
          class TermsController extends BaseController {
               public function showTerm(){
                       $terms = Term::all();
              return View::make('show_term.blade.php')->with('terms' , $terms);
           }
       }//class ends
现在制作一个
显示\u term.blade.php

 <?php
       class Terms extends \Eloquent{
         protected $fillable = array();
         protected $table = 'terms'; //terms is your database table name
   }?>
   @extends(layouts.master)
   @section('content)
    foreach($terms as term){
     {{$term->id}} , {{$term->name}} , {{$term->slug}}}
      @stop
如果您没有
layouts.master
,请在视图文件夹中创建一个
layouts
文件夹。然后创建一个
master.blade.php
编写基本html并在正文中尝试如下操作:

  <div class="container"> 
    @yield('content')
   </div>

@产量(‘含量’)

谢谢。如果您还需要什么,请告诉我。

您不能直接访问集合上的关系。我的意思是,您希望得到什么?所有描述都以逗号分隔的列表显示

相反,只要在循环所有关系时访问它们(这可能在视图中,所以在本例中我将使用刀片语法)

($term->TermTaxonomy?$term->TermTaxonomy->description:“”)
是一个。它的意思是:

if($term->TermTaxonomy){
    echo $term->TermTaxonomy->description;
}
else {
    echo '';
}
这是因为如果
术语
没有分配
术语分类法
$Term->Term分类法
将为空。使用此代码,我们仅在
术语分类法
存在时尝试访问
->描述
,因此可以避免
尝试获取非对象
异常的属性


注意:当这起作用时,您肯定应该急切地加载
术语分类法
关系。如果我们保持这样,每次执行
$term->term分类法
时,都会运行一个DB查询。要避免n+1查询,请使用
with
来急切地加载关系:

$terms = Term::with('TermTaxonomy')->get(['term_id','name']);

关于您在评论中提出的问题,是的,您可以限制从
术语分类法
中选择的字段:

$terms = Term::with(['TermTaxonomy' => function($q){
    $q->select('term_id', 'description');
}])->get(['term_id','name']);

只需确保包含建立关系所需的列(在本例中为
term\u id

那么,如何显示每个术语的描述bro?我上面的代码是否正确地使用一对一关系显示描述,或者我如何显示描述?提前感谢。我想你不清楚你的问题,或者我可能不清楚。但是,我向你展示了一个示例。如果你想显示你的描述,那么只需go抛出上面的示例。要获得描述,首先传递一个变量,该变量调用与所需表相关的模型(其中包含描述)。然后使用foreach loos调用描述,如图所示。谢谢。是的,如果调用与term_分类表相关的模型,我可以得到描述,但在这种情况下,是否可以从term模型中获得描述,因为term模型与term分类模型具有一对一的关系?无论如何,您给出的答案教我如何在bes中编写laraveli don’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’谢谢你的回答w如何显示说明。感谢$f=$e->all();为您提供了所有字段的记录。您可以使用$tax->field_name
$f=$e->all()在foreach中访问它们
仅显示术语表中的记录,因为
$e
是指向术语模型的。我需要显示术语分类表中的描述字段。问题是我不能根据术语模型中的关系调用术语分类法方法。:DYou can!使用
$e->termtasonomy->description
注意名称
termtasonomy
>与您的关系函数的名称完全相同(不带“()”)。只需尝试以下代码
$e=new Term;$f=$e->all();var_dump($e->Term taxonomy->description);
结果是尝试获取非对象的属性**,如果我在下面尝试代码
$e=new Term;$f=$e->all();var_dump($f->Term taxonomy->description)
结果是**未定义属性:illumb\Database\elounce\Collection::$TermTaxonomyhello@lukasgeiter刚刚尝试了这个
$terms=Term::with('TermTaxonomy')->get(['Term_id','name']);foreach($terms as$Term){echo$Term->Term_id.““$Term->name.”$Term->Term->description;}
我试图获取非对象的属性,但如果我删除
$term->term taxonomy->description
,代码可以工作,但只显示term\u id和名称。可能您有一些术语在数据库中没有分配
term taxonomy
?我在数据库中更新了代码
$terms = Term::with('TermTaxonomy')->get(['term_id','name']);
$terms = Term::with(['TermTaxonomy' => function($q){
    $q->select('term_id', 'description');
}])->get(['term_id','name']);