【问题标题】:How to call model function into my controller in laravel如何在 laravel 中将模型函数调用到我的控制器中
【发布时间】:2019-08-02 13:19:13
【问题描述】:

我在 App 文件夹中有一个名为 Models 的模型文件夹,在这个文件夹中我创建了一个 UserModel,我的控制器位于 App/Http/Controller 文件夹名称 UserController 中。如何将我的 UserModel 调用到 UserController 中?

我试过下面的代码。

我的控制器 UserController.php:在 App/Http/Controller 文件夹中。

    <?php 

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use App\User;
use App\Models;


class UsersController extends Controller {

    public function __construct(){
        $users = new UserModel();
    }

    public function index(){
        $user_id = $_GET['id'];
        $token = $_GET['token'];
        $userInfo = $this->users->getUserInformation($user_id); 
        return view('profile.users')->with('user_details', $userInfo);
    }

}

和我的模型:UserModel.php它在 App/Models 文件夹中。

<?php 
namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class UserModel extends Model
{
    public function getUserInformation($id){
        return "User id is : ".$id;
    }   
}
?>

【问题讨论】:

  • 您包括 App\User 但使用的是 UserModel
  • 您如何称呼您的用户模型?用户还是用户模型?
  • 你试过这个UserModel::getUserInformation($id); 吗?请use App\Models\UserModel;
  • 这个问题你解决了吗?
  • 是的,我已经修复了,将模型文件移动到 App 根文件夹。

标签: php laravel laravel-5


【解决方案1】:

如果你会这样做

<?php 
namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class UserModel extends Model
{
    public function getUserInformation(){
        return "User id is : ".$this->id;
    }   
}
?>

在控制器中

<?php 

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use App\UserModel;
use App\Models;


class UsersController extends Controller {

    public function index(){
        $user_id = $_GET['id'];
        $token = $_GET['token'];
        $user = UserModel::find($user_id);
        $userInfo = $user->getUserInformation(); 
        return view('profile.users')->with('user_details', $userInfo);
    }

}

请尝试告诉我。

【讨论】:

    【解决方案2】:

    你真的应该阅读文档并让你的风格更像 Laravel

    控制器:

    <?php 
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use App\User;
    
    class UsersController extends Controller {
        public function index()
        {
            // this is where you show list of users
            // I recommend you reading this: 
            //https://laravel.com/docs/5.8/controllers#resource-controllers
        }
    
        public function show(User $user)
        {
            return view('profile.users.show')->with('user', $user);
        }
    }
    

    路线:

    Route::get('users/{user}', 'UsersController@show');
    

    查看:

    <span>User id is : {{ $user->id }}</span>
    

    【讨论】:

      【解决方案3】:

      您做得对,只需稍作调整,您就可以开始了: 必须正确声明控制器中的 $users 变量才能被所有方法访问,因此请将控制器更新为:

      <?php 
      
      namespace App\Http\Controllers;
      
      use Illuminate\Http\Request;
      use Illuminate\Support\Facades\Auth;
      use Illuminate\Support\Facades\DB;
      use App\User;
      use App\Models\UserModel;
      
      
      class UsersController extends Controller {
          protected $users;
          public function __construct(){
              $this->users = new UserModel();
          }
      
          public function index(){
              $user_id = $_GET['id'];
              $token = $_GET['token'];
              $userInfo = $this->users->getUserInformation($user_id); 
              return view('profile.users')->with('user_details', $userInfo);
          }
      
      }
      

      【讨论】:

        【解决方案4】:

        我认为最好的方法是利用 Laravel 的依赖注入,直接在控制器方法上注入依赖:

        class UsersController extends Controller {
        
        
            public function index(UserModel $users, Request $request){
                //Using the request object is recommended
                $user_id = $request->input('id');
                $token = $request->input('token');
                $userInfo = $users->getUserInformation($user_id); 
                return view('profile.users')->with('user_details', $userInfo);
            }
        
        }
        

        【讨论】:

          【解决方案5】:

          因为$this-&gt;users 正在返回一个集合,所以你必须循环它,然后在其中调用你的模型函数。

          foreach($this->users as $user){
               $userInfo = $user->getUserInformation($user_id);
          }
          
          ///
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-08-27
            • 2014-12-24
            • 2013-10-16
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多