Php 单击按钮保存用户数据
我正在研究laravel 5.4,我有以下代码:Php 单击按钮保存用户数据,php,laravel,laravel-5,Php,Laravel,Laravel 5,我正在研究laravel 5.4,我有以下代码: public function apply($id){ $user = User::where('id', $id)->get()->first(); $data = [ 'name' => $user->first_name, 'family' => $user->last_name, 'email' => $user->email,
public function apply($id){
$user = User::where('id', $id)->get()->first();
$data = [
'name' => $user->first_name,
'family' => $user->last_name,
'email' => $user->email,
'username' => $user->username,
'gender' => $user->gender,
'birthday' => $user->birthday,
'cv' => $user->cv,
'about' => $user->about,
'education' => $user->education,
'experiences' => $user->experiences,
];
$company = Company::get()->first();
Mail::send('emails.apply', $data, function ($message) use ($company)
{
$message->from('noreply@gmail.com', 'Robert Nicjoo');
$message->subject('New Apply');
$message->to($company->email);
});
Mail::send('emails.uapply', $data, function ($message) use ($user)
{
$message->from('noreply@gmail.com', 'Robert Nicjoo');
$message->subject('You Applied successfully');
$message->to($user->email);
});
Session::flash('success', 'Your application was sent to company.');
return redirect()->back()->with('session', $data);
}
当用户单击应用按钮并向他们发送用户信息时,这将向公司发送电子邮件,现在我还想在另一个表中保存用户的数据,包括user\u id、ad\u id和company\u id
,以便用户和公司所有者都可以访问其应用广告的历史记录
我还有此表用于保存以下数据:
public function up()
{
Schema::create('applies', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->integer('ad_id')->unsigned();
$table->integer('company_id')->unsigned();
$table->timestamps();
});
Schema::table('ads', function($table) {
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('ad_id')->references('id')->on('ads');
$table->foreign('company_id')->references('company_id')->on('ads');
});
}
但在我的控制器中(第一个代码),我需要知道如何将这些信息保存在新表中(第二个代码)
更新:
广告模式>>
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Ad extends Model
{
protected $fillable = [
'company_id', 'title', 'slug', 'image', 'description', 'address', 'job_title', 'salary',
];
public function company(){
return $this->belongsTo(Company::class);
}
public function category(){
return $this->belongsTo(Category::class);
}
public function location(){
return $this->belongsTo(Location::class);
}
public function employment(){
return $this->belongsTo(Employment::class);
}
}
您的路线应该是:
Route::post('apply/{$user_id}/{company_id}/{ad_id}','ApplyController@apply');
我想你们已经为广告制作了模型
因此,只需像这样保存数据:
<a class="btn btn-info btn-round" href="{{ route('apply.btn', Auth::user()->id) }}">
你的功能应该是
public function apply(Request $request){
// other code
$apply = new Apply();
$apply->user_id = $request->user_id;
$apply->ad_id = $request->ad_id;
$apply->company_id = $request->company_id;
$apply->save();
// other code
}
还有一件事,您应该在post请求中包含ad_id。因为您的刀片是这样的:
<a class="btn btn-info btn-round" href="{{ route('apply.btn', Auth::user()->id) }}">
为什么只有我?因为在我们的讨论中,我发现ad\u id
和company\u id
是从控制器处获取的。。那么在你的控制器中,这应该是可行的
public function apply($id)
{
$ad = Ad::first();
$company = Company::first();
$apply = new Apply();
$apply->user_id = $id
$apply->ad_id = $ad->id;
$apply->company_id = $company->id;
$apply->save();
// some more codes //
}
要避免使用用户id重复。。添加一个验证函数,如
function validateApply(array $data)
{
return Validator::make($data, [
'user_id' => 'required|numeric|unique:apply,user_id,NULL,id,ad_id,'.$data->ad_id,
]);
}
唯一:应用-这意味着它将检查已应用用户id的应用表
然后在上面的代码中只需执行以下操作
$validateApply= $this->validateApply(['user_id'=>$id,'ad_id'=>$ad->id]);
if(!$validateApply->fails())
{
// do the above code here
}
else
{
// duplicate !!! so do your code here
}
然后检索数据,假设apply已经属于用户,并且用户有一个apply
Auth::user()->apply->first()->somefield;
// im not sure how the hasOne works but try
Auth::user()->apply->somefield;
为什么要使用get()->first(),只需使用->first()。另一件事,你从哪里得到公司id和广告id?@Sagar get()->first()没有理由只是老派的事情,我也更新了我的代码,因为它现在在我的系统中。但是没有包含广告id的数据吗?您将从哪里获得?好的,请看,按钮位于ad
(post)内处理来自另一个控制器的数据的页面,当用户点击此按钮时,它确切地知道向哪个公司发送电子邮件,广告所有者公司,所以我的页面中已经有了这些id,也许我可以在这里使用它们,或者如果需要,我也可以在这里添加它们。(这是我的问题,如何获取和传递数据)你能将你的路线添加到这个功能中吗?所以你建议我将这个添加到我的广告模型中?模型将如何准确地保存数据?+我不想保存任何东西来应用表,直到用户点击应用按钮,然后得到这些信息。例如,如果ad1
没有任何用户应用,那么将不会在apply\u表中进行任何保存
我希望我解释得很好!当用户单击应用按钮时,您必须向应用和ads表插入数据,我说的对吗?没有ads表,只有应用
表。广告表只是用来保存像帖子一样的广告。此信息将保存在应用
表中我还添加了我当前的广告型号
代码中的其他代码是什么?!PS:我也有应用模型,我不应该把这个添加到那个表中,这样就可以直接保存在那个表中了!所以它实际上回到了我的第一个代码,除了删除的请求,它现在可以工作了,非常感谢,但是有两个问题。。。1-如何停止重复?用户只能申请一次。2-我无法在blade中获得结果。你不认为我们应该进行比较吗?例如,如果我们只检查用户id,这意味着用户只能在一个广告中申请,这将是所有事实上用户应该能够申请尽可能多的s(他)想只是不到同一个广告。我认为,如果我们比较用户id和广告id,这将是最好的,这样一个用户只能在每个广告中申请一次,原因将检查广告id以及。如果我错了,请告诉我。。好啊现在我明白了。。1个ad=每个用户1个应用权限?这家公司怎么样?是的,这家公司不重要,可能一家公司有5个广告,用户希望申请所有职位,但每个职位只有一次。。已更新验证。。我们所做的是在该广告id中使用用户id避免重复。。