【问题标题】:Why my condition is not work correctly? PHP Laravel为什么我的情况不能正常工作? PHP Laravel
【发布时间】:2018-10-10 09:52:08
【问题描述】:

注意:在我的视图之前,我有另一个视图显示表动物和类的所有动物和类。在该视图中,我有一个按钮,当我单击特定记录时会显示更具体的细节。

这是重定向到我的视图的按钮。我们将此视图称为动物详细信息视图。

动物详情视图。

我认为有一个条件是假设比较 2 个表之间的 2 个字段的值。表格 Animals 和表格 Classes。

这是条件。

<!--TABLE ANIMALS DETAILS IN MY VIEW-->
<!--THEAD-->
<tbody>     
    <tr>
        <td>{{$animal->id}}</td>
        <td>{{$animal->name}}</td>
        <td>{{$animal->area}}</td>
                            
            @if($animal->animal_class_id == $class->id)
                <td>{{$class->name}}</td>
            @endif
    </tr>
</tbody> 

我尝试比较 animal_class_id(表 Animals)id(表 Classes) 之间的值,然后显示相应的名称类的。

它不起作用, 它比较 id (动物表)@987654325 @ (也属于动物表)

为什么我的情况不比较我尝试比较的字段?

另外我会把我的控制器,函数show()

public function show($id){

    $animal = AnimalNew::find($id);

    $class = AnimalClass::find($id);

    $habitat = Habitat::all();

    return view('animals.ShowAnimalsDetails',  compact('animal', 'class', 'habitat'));

}

也许我可以在函数 show() 中做一个条件,在那里我可以比较字段之间的值:animal_class_id 来自表格动物,以及 id 来自表类。

例如,我有这样的记录:

餐桌动物

id|name       | animal_class_id

1 |Lion       | 1
2 |Tiger      | 1
3 |Salamander | 2
4 |Sparrow    | 3
5 |Ant        | 4

AND THE TABLE 类

id| name

1 | Mammals
2 | Amphibians
3 | Birds
4 | Insects

它仅适用于第一条记录,其中 2 个 id 分别具有相同的值。在这种情况下,Lion 的 id = 1 和 animal_class_id = 1。

但正如我之前所说,我想比较 table Animals 的字段 animal_class_idid 字段之间的值> table Classes,而不是同一个 table 的 idanimal_class_id

【问题讨论】:

  • 为什么不直接使用关系,而是可以遍历它呢?
  • @aynber 对不起,我听不懂你的意思

标签: php laravel


【解决方案1】:

在您的 show 函数中,您可以通过相同的 id 找到 $class 和 $animal, 但这不是真的,你可以通过id找到$animal,$class = AnimalClass::where('id', $animal-&gt; animal_class_id)-&gt;first();

但最好的方法是使用 oneToMany 关系:https://laravel.com/docs/5.7/eloquent-relationships#one-to-many

在你的模型文件(AnimalClass.php)中,添加:

public function animalNews() {
  return $this->hasMany('App\AnimalNews');
}

还有你的模型文件(AnimalNew.php),添加:

public function animalClass() {
  return $this->belongsTo('App\AnimalClass');
}

在视图中:

<!--TABLE ANIMALS DETAILS IN MY VIEW-->
<!--THEAD-->
<tbody>     
  <tr>
    <td>{{$animal->id}}</td>
    <td>{{$animal->name}}</td>
    <td>{{$animal->area}}</td>
    <td>{{$animal->animalClass()->first()->name}}</td>
 </tr>

【讨论】:

  • 首先,我已经有了那些关系,其次。然后在我看来,当我写这篇文章时,我收到一个错误,上面写着:Trying to get property 'name' of none-object (C:\xampp\htdocs\zoo\resources\views\Animals\AnimalDetails.blade.php). 第三,字段name 应该来自table Classes,所以我认为我应该调用这个字段是这样的,&lt;td&gt;{{$class-&gt;name}}&lt;/td&gt;
  • $animal-&gt;animalClass() 是一种方法,我改变了答案。
  • 我试过这个,但我有另一个错误:Call to undefined method... 在我的AnimalDetails.blade.php 这是我的看法。
  • Call to undefined method... 请发布完整的错误消息。
  • Call to undefined method Illuminate\Database\Query\Builder::animalClass() (View: C:\xampp\htdocs\zoo\resources\views\Animals\AnimalDetails.blade.php) 那是错误。
猜你喜欢
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多