Php 单击按钮保存用户数据

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,

我正在研究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,
      '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避免重复。。