2016-09-23 120 views
-1

这为我创建了一个新项目。但是,我想要做的是在数据库中添加属于另一个名为projects_air的数据库表的附加字段,并在该项目上添加这些空气详细信息。将数据插入数据库 - LARAVEL

public function newProject(Request $request) 
    { 
     $data = $request->all(); 

     $attributes = []; 
     $attributes['title'] = $data['title']; 
     $attributes['start_date'] = date("Y-m-d h:i:s", strtotime($data['start_date'])); 
     $attributes['end_date'] = date("Y-m-d h:i:s", strtotime($data['end_date'])); 
     $attributes['created_by'] = Auth::user()->id; 
     $attributes['description'] = $data['description']; 
     $attributes['air'] = '10'; 
     $attributes['water'] = '19'; 
     $attributes['lat'] = $data['lat']; 
     $attributes['lng'] = $data['lng']; 



//  var_dump($attributes); 
//  return; 

     $project = Projects::create($attributes); 
     $air = Projects_air::create($airattributes); 

     if($project) 
      return redirect('home')->with('success', 'Project added successfully'); 

     var_dump($data); 
     return; 
    } 

额外的数据接入到数据库:

 $airattributes['dust'] = $data['dust']; 
    $airattributes['noise'] = $data['noise']; 
    $airattributes['temperature'] = $data['temperature']; 
    $airattributes['radiation'] = $data['radiation']; 

我想,这些数据也属于一个项目,他们都(项目表和projects_air表)都称为“PROJECT_ID”

我曾尝试使用此$air = $project->air()->create($airattributes);但IM发现错误,列项目_ID不存在,这是真实的。它应BE PROJECT_ID但我不知道哪里出错

在这里你可以看到接口:http://188.166.166.143/projects/add

UPDATE: 空调型号:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Air extends Model 
{ 
    protected $table = 'projects_air'; 
    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'project_id', 'temperature', 'radiation', 'dust', 'noise' 
    ]; 

    /** 
    * The attributes that should be hidden for arrays. 
    * 
    * @var array 
    */ 
    protected $hidden = [ 
     'id', 
    ]; 
} 

项目控制器

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

use App\Projects; 
use App\Enroll; 
use View; 
use Auth; 
use App\Air; 

class ProjectsController extends Controller 
{ 
    /** 
    * Create a new controller instance. 
    * 
    * @return void 
    */ 
    public function __construct(Projects $projects) 
    { 
     $this->middleware('auth'); 
     $this->projects = $projects; 
    } 

    // Add new project 
    public function addProject() 
    { 
     return View::make('projects/add_project'); 
    } 


    // Process new project 
    public function newProject(Request $request) 
    { 
     $data = $request->all(); 

     $attributes = []; 
     $attributes['title'] = $data['title']; 
     $attributes['start_date'] = date("Y-m-d h:i:s", strtotime($data['start_date'])); 
     $attributes['end_date'] = date("Y-m-d h:i:s", strtotime($data['end_date'])); 
     $attributes['created_by'] = Auth::user()->id; 
     $attributes['description'] = $data['description']; 
     $attributes['air'] = '10'; 
     $attributes['water'] = '19'; 
     $attributes['lat'] = $data['lat']; 
     $attributes['lng'] = $data['lng']; 
     $airattributes['dust'] = $data['dust']; 
     $airattributes['noise'] = $data['noise']; 
     $airattributes['temperature'] = $data['temperature']; 
     $airattributes['radiation'] = $data['radiation']; 
     $airattributes['project_id'] = $data['project_id']; 


//  var_dump($attributes); 
//  return; 

     $project = Projects::create($attributes); 
     $air = $project->air()->create($airattributes); 

     var_dump($air); 
     return; 


     if($project) 
      return redirect('home')->with('success', 'Project added successfully'); 

     var_dump($data); 
     return; 
    } 

    // Show all projects 
    public function showProjects() 
    { 

     $data = Projects::get(); 
     return View::make('projects/list_projects')->with('projects', $data); 

    } 

    // Show single project 
    public function showSingleProject($id) 
    { 
     if(is_null($id)) 
      return back()->with('error', 'Invalid project'); 


     $project = Projects::where('id', $id)->first(); 

     if(is_null($project)) 
      return back()->with('error', 'Project not found'); 


     return View::make('projects/single_project2')->with('project', $project); 

    } 

    // Show single project 
    public function showEditProject($id) 
    { 
     if(is_null($id)) 
      return back()->with('error', 'Invalid project'); 


     $project = Projects::where('id', $id)->first(); 

     if(is_null($project)) 
      return back()->with('error', 'Project not found'); 


     $hasAccess = 0; 


     if(!empty($project->enrolls)) 
     { 
      foreach($project->enrolls as $enroll) 
      { 

       if($enroll->user_id == Auth::user()->id) 
       { 
        $hasAccess = 1; 
        break; 
       } 


      } 
     } 


     if($project->created_by == Auth::user()->id) 
      $hasAccess = 1; 



     if($hasAccess != 1) 
      return back()->with('error', 'You are not allowed to edit this project'); 


     return View::make('projects/edit_project')->with('project', $project); 

    } 




    // Show single project 
    public function showDeleteProject($id) 
    { 
     if(is_null($id)) 
      return back()->with('error', 'Invalid project'); 


     $project = Projects::where('id', $id)->first(); 

     if(is_null($project)) 
      return back()->with('error', 'Project not found'); 


     if($project->created_by != Auth::user()->id) 
      return back()->with('error', 'You are not the owner of this project'); 


     return View::make('projects/delete_project')->with('project', $project); 

    } 


    public function processDeleteProject(Request $request) 
    { 
     $data = $request->all(); 

     if(!is_null($data['pk'])) 
      Projects::where('id', $data['pk'])->delete(); 


     return redirect('home')->with('success', 'Project deleted successfully'); 

    } 

    public function enrollToProject($id) 
    { 
     if(is_null($id)) 
      return back()->with('error', 'Invalid project'); 

     $userId = Auth::user()->id; 
     $attributes = []; 
     $attributes['user_id'] = $userId; 
     $attributes['project_id'] = $id; 

     $enrolled = Enroll::create($attributes); 

     if($enrolled) 
      return back()->with('success', 'You have successfully enrolled to this project'); 

    } 


    public function showImportView() 
    { 

     return View::make('projects/import_project'); 
    } 



    public function processImport(Request $request) 
    { 

     $data = $request->all(); 

     if($data['file']) 
     { 
      $csvData = file_get_contents($data['file']); 
      $lines = explode(PHP_EOL, $csvData); 
      $csv = array_map('str_getcsv', $lines); 
      $csv = array_shift($csv); 

      if(is_null($csv)) 
       return back()->with('error', 'Its Empty'); 



      $attributes = []; 
      $attributes['title'] = $csv[0]; 
      $attributes['start_date'] = date("Y-m-d h:i:s", strtotime($csv[1])); 
      $attributes['end_date'] = date("Y-m-d h:i:s", strtotime($csv[2])); 
      $attributes['created_by'] = Auth::user()->id; 
      $attributes['description'] = $csv[3]; 
      $attributes['air'] = $csv[4]; 
      $attributes['water'] = $csv[5]; 


      $project = Projects::create($attributes); 

      if($project) 
       return redirect('home')->with('success', 'Project imported successfully'); 

//   var_dump($attributes); 
//   echo '<pre />'; 
//   return; 
     } 


    } 


} 
+0

所以你干吗创建上面代码中的数组?您应该创建'airattributes'并确保您在projects_air模型中具有正确的'fillable'属性 –

+0

您可以添加模型代码吗?恐怕我没有完全按照问题所在。 – ollieread

+0

问题更新 – dailyadd

回答

0

定义您的模型中的关系:

class Projects extends Model { 
    public function air() { 
     return $this->hasMany('App\Projects_air'); 
    } 
} 

然后在你的控制器:

$project = Projects::create($attributes); 
$air = $project->air()->create($airattributes); 
+0

我应该在哪里定义$ air? – dailyadd

+0

你不需要定义它,你会为它分配新创建的空气项目 – Sherif

+0

它们都有不同的表格:air有不同的表格和项目有不同的表格。 – dailyadd