【问题标题】:laravel passing value from controller to modellaravel 将值从控制器传递到模型
【发布时间】:2016-07-04 11:51:09
【问题描述】:

我有一个基本控制器,它根据每个请求的域名获取某些默认属性。其中包括app_idlanguage_id

在我的模型中设置这些值的推荐方法是什么,例如,如果我尝试创建一个新的 Post 模型,它将由定义的值设置 app_idlanguage_id我的 base_controller。

欢迎任何回复。

【问题讨论】:

  • 在模型中使用 __construct 方法。在对象启动时传递这些值。
  • 感谢 Ravi,我尝试在模型上使用 __construct 并进行测试,只是硬编码了 app_id 的值,但是当我尝试保存新的对象时 app_id 没有被存储。
  • 在所有模型中注入app_idlanguage_id 有什么特别的原因吗?而是创建一个只有这些作为属性的模型,并使用 eloquent 映射那些。或将它们注入用户对象并传递它
  • @jon: 你检查过 $fillable 类的属性了吗?
  • 感谢 Ravi,但可填充属性包括 app_id

标签: php laravel lumen


【解决方案1】:

您可以使用会话来存储您的 app_id 和语言 ID,并在需要时从会话中获取。

Check How to use sessions in Laravel from here

【讨论】:

  • 感谢 MohammedA,这是推荐的传递数据的最佳实践方式吗?
  • 取决于您存储的数据及其敏感程度,以及您存储的位置。即,如果您将会话存储在 cookie(而不是数据库或文件)中,那么任何人都可以访问您的数据。
【解决方案2】:

您可以按照评论中的建议使用__consruct 方法。

这是另一种选择:-

YourController.php

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

use App\YourModel;

class YourController extends Controller
{

    public function callModelStaticMethod()
    {
        $data = ['appId'=>4, 'languageId'=>5];
        YourModel::passDataToModelMethod($data);        
    }
}

YourModel.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class YourModel extends Model
{

    public static function passDataToModelMethod($data)
    {
      var_dump($data);
      // Write your business logic here.
      // $newObj = new self;
      // $newObj->app_id = $data['app_id'];
      // $newObj->language_id = $data['languageId'];
      // $newObj->save();
    }

}

【讨论】:

  • 感谢@Ravi Hirani 一直以来的帮助,那么我什么时候可以调用 callModelStaticMethod() 来设置数据?
  • @jon:你不需要调用那个方法。这只是一个例子。您应该考虑该方法中的代码。通过该代码,您可以将数据从控制器传递到模型。一个问题你是如何在controller中得到app_id和language_id的?
  • 我正在设置 $data = Domain::where('domain', '=', $_SERVER['SERVER_NAME'])->first();在控制器的构造函数中。
  • @jon:当需要调用模型保存数据时,只需要传递$data即可。
  • 我觉得我有点傻。我什至不需要将数据传递给模型,保存方法是从控制器运行的,所以我可以简单地通过保存方法在新对象上设置 app_id 和 language_id。感谢您的帮助,非常感谢。
【解决方案3】:

@ravi...只是对您的代码进行一些更正。你不能直接从模型中调用你的方法。

YourModel::passDataToModelMethod($data);   

以上都行不通,你需要按如下操作

$insertData=new YourModel();
$insertData->passDataToModelMethod($data);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 2016-04-16
    • 2012-08-01
    • 1970-01-01
    相关资源
    最近更新 更多