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
- 术语识别码
- 描述
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']);