【问题标题】:Inserting values to a form with relationship in laravel (Referring projectid)在 laravel 中将值插入到具有关系的表单中(引用 projectid)
【发布时间】:2018-03-22 16:42:01
【问题描述】:

有一个单独的表格,它包含详细信息并将其保存到 db 中的 4 个不同的表中。项目、活动、捐赠和机会。项目有很多活动、很多捐赠和很多机会。我也想在其他表中使用项目 ID。但是当我保存表单时,详细信息存储在每 4 个表中,但其他 3 个表事件、捐赠和机会没有采用该项目。它的值为 0。如何在所有其他三个表中获取该特定项目 id(自动增量)。

我的 ProjectController 是这样的:

class ProjectController extends Controller
{
public function getProject()
{
    return view ('other.project');
}

public function postProject(Request $request)
{
    $this->validate($request, [
        'ptitle' => 'required|max:200',
        'pdescription' => 'required',
        'etitle' => 'required|max:200',
        'edetails' => 'required',
        'dtotal' => 'required',
        'oposition' => 'required|max:100',
        'odescription' => 'required',
    ]);

    Project::create([
        'ptitle' => $request->input('ptitle'),
        'pdescription' => $request->input('pdescription'),
        'pduration' => $request->input('pduration'),
        'psdate' => $request->input('psdate'),
        'pedate' => $request->input('pedate'),
        'pcategory' => $request->input('pcategory'),
        'pimage' => $request->input('pimage'),
    ]);

    Event::create([ 
        'pro_id' => $request->input('pid'),
        'etitle' => $request->input('etitle'),
        'pdetails' => $request->input('pdetails'),
        'edate' => $request->input('edate'),
        'etime' => $request->input('etime'),
        'elocation' => $request->input('elocation'),
        'eimage' => $request->input('eimage'),
    ]);

    Donation::create([  
        'pro_id' => $request->input('pid'),         
        'dtotal' => $request->input('dtotal'),
        'dinhand' => $request->input('dinhand'),
        'dbankaccount' => $request->input('dbankaccount'),
    ]);

    Opportunity::create([
        'pro_id' => $request->input('pid'), 
        'oposition' => $request->input('oposition'),
        'odescription' => $request->input('odescription'),
        'olocation' => $request->input('olocation'),
        'odeadline' => $request->input('odeadline'),
    ]);

 return redirect()
        ->route('home')
        ->with('info', 'Your project has been created.');
}

我的项目模型:

class Project extends Model
{
use Notifiable;

protected $fillable = [
    'ptitle',
    'pdescription',
    'pduration',
    'psdate',
    'pedate',  
    'pcategory', 
    'pimage',
];

public function events()
{
    return $this->hasMany('Ngovol\Models\Event', 'pro_id');
}

public function donations()
{
    return $this->hasMany('Ngovol\Models\Donation', 'pro_id');
}

public function opportunities()
{
    return $this->hasMany('Ngovol\Models\Event', 'pro_id');
}

protected $hidden = [

];
}

事件模型:

class Event extends Model
{
use Notifiable;

protected $table = 'events';

protected $fillable = [
    'pro_id',
    'etitle',
    'edetails',
    'edate',
    'etime',
    'elocation',
    'eimage',
];

public function projects()
{
    return $this->belongsTo('Ngovol\Models\Project', 'pro_id'); 
}
}

捐赠模式:

class Donation extends Model
{
use Notifiable;

protected $fillable = [
    'pro_id',
    'dtotal',
    'dinhand',
    'drequired',
    'dbankaccount',
];

protected $hidden = [

];

public function projects()
{
    return $this->belongsTo('Ngovol\Models\Project', 'pro_id');
}
}

机会模型:

class Opportunity extends Model
{
use Notifiable;

protected $fillable = [
    'pro_id',
    'oposition',
    'odescription',
    'olocation',
    'odeadline',

];

protected $hidden = [

];

public function projects()
{
    return $this->belongsTo('Ngovol\Models\Project', 'pro_id');
}
}

【问题讨论】:

    标签: php mysql laravel foreign-keys


    【解决方案1】:

    最好试试下面的代码

    $project = Project::create( $request->only(['ptitle', 'pdescription', 'pduration', 'psdate', 'pedate', 'pcategory', 'pimage']));
    
    $project->events()->create( $request->only(['etitle', 'pdetails', 'edate', 'etime', 'elocation', 'eimage']));
    
    $project->donations()->create($request->only(['dtotal', 'dinhand', 'dbankaccount']));
    
    $project->opportunities()->create($request->only(['oposition','odescription','olocation','odeadline']));
    

    【讨论】:

    • 谢谢。但是当我尝试它时出现错误。 “BadMethodCallException 调用未定义的方法 Illuminate\Database\Query\Builder::event()”这个错误。对不起,我是 laravel 的新手。
    • 感谢表格引用了项目 ID。但现在又出现了一个新问题。只有捐赠表正在接受值。事件表正在插入 2 行具有事件 ID 和 pro_id 但其他值为空的行。机会表为空。没有插入任何行。请帮帮我
    • 在你的 .env 文件中设置 APP_DEBUG=true 以查找详细错误。
    • 它运行良好。发现错误。谢谢@Praveen 泰米尔语
    猜你喜欢
    • 2018-10-09
    • 2020-08-30
    • 1970-01-01
    • 2023-03-31
    • 2013-07-20
    • 1970-01-01
    • 2016-10-20
    • 2013-12-31
    • 2010-10-29
    相关资源
    最近更新 更多