Laravel 5 在 blade 视图中调用模型函数

Laravel 5 call a model function in a blade view

我想从 3 table 秒开始构建一个 blade 视图:

但是,在浏览器中,我有错误:"Class 'Product' not found"。

有没有办法把这个函数传递给视图(根据article_type和article_id查找产品或服务的名称)?

我也尝试过连接查询,但我不能在单个连接查询中放置这么多条件.. 其中 article_type 是 "p",然后使用 "products" 连接table ... 或 .... 其中 article_type 是 "s",然后加入 "services" table.

我解决了问题。很简单。语法错误。

  • App\Product
  • App\Service

不过我也想知道怎么传一个带参数的函数来查看....

与您回答的问题相关:

您有多个选项可以更好地实现此目的:

假设您有一个传递给视图的模型:

$model = Model::find(1);
View::make('view')->withModel($model);

现在在你的模型中你可以有一个函数:

public function someFunction() {
    // do something
}

在您看来,您可以直接调用该函数:

{{$model->someFunction()}}

如果您想对模型(数据集)做些事情,这很好。

如果没有,您仍然可以在模型中创建静态函数:

public static function someStaticFunction($var1, $var2) {
    // do something
}

然后:

{{App\Model::someStaticFunction($yourVar1,$yourVar2)}}

希望对您有所帮助。

您可以将它传递给视图,但首先在控制器中查询它,然后再添加:

return view('yourview', COMPACT('variabelnametobepassedtoview'));

我认为您需要的是模型上的关系,而不是在控制器上传递函数或查询它,因为这些是数据库中的相关表。

如果根据您的结构,input_details 和产品相关,您应该像这样在您的模型上放置关系定义:

public class InputDetail(){
 protected $table = "input_details";
 ....//other code

 public function product(){
   return $this->hasOne('App\Product');
 }
}

那么在你看来你只需要说:

<p>{{ $input_details->product->name }}</p>

那样更简单。控制器应该只为当前资源执行业务逻辑也是最佳实践。有关如何执行此操作的更多信息,请访问文档:https://laravel.com/docs/5.0/eloquent#relationships

我 运行 遇到了一个类似的问题,我想从我的视图中调用我的控制器中定义的函数。虽然让我困惑了一段时间,试图找出如何从视图到达控制器,但事实证明它相当简单。

我将一个数组交给我的视图,其中包含视图格式化的数据记录,并使用 jQuery 数据表(big duh)呈现给用户。显示的 UI table 中的一列是一组操作按钮,需要根据每行中的数据内容为每行创建这些按钮。我想我可以将按钮定义添加到数据行中作为发送到视图的列,但并非所有视图都需要按钮,为什么?相反,我想要需要他们添加它们的视图。

在控制器中,我将对控制器本身的引用传递给视图,如

->with('callbackController', $this)

我将其称为 callbackController,因为我当时就是这样做的。现在,在我看来,我可以转义到 PHP 以使用 $callbackController 访问父控制器,如

<?php echo $callbackController->makeButtons($parameters); ?>

或者只使用 Blade 机制

{!! $callbackController->makeButtons($parameters); ?>

似乎跨多个控制器和视图工作正常。我没有注意到使用这种机制的性能损失,我有一个超过 50K 行的巨大 table。

我还没有尝试传递对其他对象(例如模型等)的引用,但我看不出有什么不可行的

可能不够优雅,但似乎可以完成工作。

想在以下视图中使用模型:

{{ Product::find($id) }}

您可以在视图中使用:

<?php
$tmp = \App\Product::find($id);
?>
{{ $tmp->name }}

希望对您有所帮助

在 Laravel 的新版本中,您可以使用 "Service Injection"。

https://laravel.com/docs/5.8/blade#service-injection

/resources/views/main.blade.php

@inject('project', 'App\Project')

<h1>{{ $project->get_title() }}</h1>