【问题标题】:store data into two tables at time using laravel8使用 laravel 8 将数据一次存储到两个表中
【发布时间】:2021-08-29 04:08:27
【问题描述】:

我正在尝试将数据存储到数据库中,但遇到了一种情况,我不知道这样做是否可行。

所以我在数据库中有两个下表

 public function up()
    {
        Schema::create('castings', function (Blueprint $table) {
            $table->increments('id_casting');
            $table->string('nom');
            $table->string('prenom');
            $table->string('cine');
            $table->date('date_naissance');
            $table->string('lieu_naissance');
            $table->integer('mineur')->default('0');
            $table->integer('id_representant')->nullable()->unsigned();
            $table->timestamps();
            $table->foreign('id_representant')->references('id_representant')->on('representants');
        });
    }
 public function up()
    {
        Schema::create('representants', function (Blueprint $table) {
            
            $table->increments('id_representant');
            $table->string('nom_prenom');
            $table->string('cine');
            $table->string('lien_casting');
            $table->integer('actif');
            $table->timestamps();
        });
    }

我的模型:

class Casting  Model
{
    use HasFactory;
   
extends     protected $fillable = ["id_casting",
        "nom", "prenom" , "cine" , "date_naissance","lieu_naissance" ,"mineur"
    ];


    public function representants()
{
    return $this->belongsTo('App\Representant');
}

}

和模特代表

class Representant extends Model
{
    use HasFactory;

     protected $fillable = ["id_representant",
            "nom_prenom", "cine" , "lien_casting","actif"
    ];


    function castings() {

    return $this->hasMany('Casting');
}

}

我有以下表格:

<form id="castingform" method="post" action="castingss"   enctype="multipart/form-data">
       
                        {{ csrf_field() }}
                        <input type="hidden" id="id_hidden" name="id" />
                        <div class="form-row">
                           <div class="form-group col-md-6">
                              <label for="casting_name">Nom</label>
                              <input type="text" class="form-control" id="nom" name="nom" placeholder="Nom" >
                             
                           </div> 
                           <div class="form-group col-md-6">
                              <label for="casting_name">Prénom</label>
                              <input type="text" class="form-control" id="prenom" name="prenom" placeholder="Prenom" >
                         
                           </div>
                           </div>
                         <div class="form-row">
                           <div class="form-group col-md-6">
                              <label for="casting_cin">CIN</label>
                              <input type="text" class="form-control" id="cine" name="cine" placeholder="Cin">
                           </div>
                         </div>
                         <div class="form-row">
                           <div class="form-group col-md-6">
                              <label for="casting_date_naissancee">Date de naissance</label>
                             <div class="input-group date">

                                            <input type="text" class="form-control" id="date_naissance" name="date_naissance">
                                            <span class="input-group-text input-group-append input-group-addon" id="spanEstPaymentDate">
                                                <i class="simple-icon-calendar"></i>
                                            </span> 
                                        </div>
                                 </div>
                           <div class="form-group col-md-6">
                              <label for="casting_lieu_naissance">Lieu de naissance</label>
                              <input type="text" class="form-control" id="lieu_naissance" name="lien_naissance" placeholder="Lieu de naissance">
                           </div>
                         </div>  
                          <div class="form-group col-md-6 js-guarantor-container" hidden>
                        <label for="guarantor">Nom et prénom du représentatnt légal </label>
                        <input type="text" class="form-control" id="nom_prenom" name="nom_prenom" placeholder="Représentant">
                    </div>
                    <div class="form-group col-md-6 js-guarantor_identification_number-container" hidden>
                        <label for="guarantor_identification_number">CIN du représentatnt légal</label>
                        <input type="number" class="form-control" id="cine_representant" name="cine_representant" placeholder="CINE">
                    </div> 
                    <div class="form-group col-md-6 js-guarantor_lien-container" hidden>
                        <label for="guarantor_identification_number">Lien</label>
                        <input type="text" class="form-control" id="lien_casting" name="lien_casting" placeholder="Lien">
                    </div>      
                       
                    
                        <div class="form-group" align="center">
                          <input type="hidden" name="action" id="action" />
                          <input type="hidden" name="hidden_id" id="hidden_id" />
                          <input type="submit" name="action_button" id="action_button" class="btn btn-warning" value="ADD" />
                        </div>
                        <div class=" col-md-6">
                          <span id="form_result"></span>
                        </div>
                     </form>

我的脚本:

<script type="text/javascript">

   $(document).ready(function(){

     $('#date_naissance').change(function (evt) {
 
          var dateinput = $('#date_naissance').val();
         /* alert(dateinput);*/
          var guarantorContainer = document.querySelector('.js-guarantor-container');
          var guarantorIdentificationNumberContainer = document.querySelector('.js-guarantor_identification_number-container');
          var guarantorLienContainer = document.querySelector('.js-guarantor_lien-container');
              var a=  moment().diff(moment(evt.target.value, "MM/DD/YYYY"), 'years');
         /* alert(a);*/
          if (a < 18) {
          guarantorContainer.removeAttribute('hidden');
          guarantorIdentificationNumberContainer.removeAttribute('hidden');
          guarantorLienContainer.removeAttribute('hidden');
          } else {
          guarantorContainer.setAttribute('hidden', true);
          guarantorIdentificationNumberContainer.setAttribute('hidden', true);
          guarantorLienContainer.setAttribute('hidden',true);
          }

    });
    });

</script>

我设法将数据插入到单个表中,但我发现这个级别的复杂性:

在我的表格中插入时,当我从出生日期计算年龄并且我发现年龄小于 18 岁时,我必须在 castings 表中插入代表的 id并同时在representans表中插入代表信息名称、代表电影和链接。 而且如果年龄小于 18 岁,列 mineur 必须设置为 1

所以我在我的控制器中尝试以下代码:

 public function store(Request $request)

{

      $representants = new Representant();
      $castings = new Casting();
  
      $date = $request['date_naissance']; // 24/8/1995
      $age = Carbon::now()->format('Y')- Carbon::createFromFormat('dd/mm/YYYY', $date)->format('Y');

      if ($age < 18) {

             $representants->nom_prenom = $request['nom_prenom'];
             $representants->cine = $request['cine_representant'];
             $representants->lien_casting = $request['lien_casting'];
             $representants->save();
             $castings->nom = $request['nom'];
             $castings->prenom = $request['prenom'];
             $castings->cine = $request['cine'];
             $castings->date_naissance = $date  ;
             $castings->lieu_naissance = $request['lieu_naissance'];
             $castings->mineur = 1;
             $castings->id_representant = $representants->id_representant;
             $castings->save();
  }else{
     
             $castings->nom = $request['nom'];
             $castings->prenom = $request['prenom'];
             $castings->cine = $request['cine'];
             $castings->date_naissance =  $date  ;
             $castings->lieu_naissance = $request['lieu_naissance'];

  }
    }

但我收到以下错误:

{消息:“发现意外数据。↵数据丢失”,...} 异常:“Carbon\Exceptions\InvalidFormatException” 文件:“D:\Projet_Cast_Infl\vendor\nesbot\carbon\src\Carbon\Traits\Creator.php” 线路:643 消息:“发现意外数据。\r\n数据丢失”

如果你有任何想法帮助我

提前致谢

【问题讨论】:

    标签: jquery ajax laravel datatable


    【解决方案1】:

    试试

    $age = Carbon::parse($date)->diff(Carbon::now())->y;
    

    【讨论】:

    • 感谢您的帮助,这对我的问题有效,但现在我收到以下错误消息:“SQLSTATE [23000]:违反完整性约束:1048 Le champ 'id_representant' ne peut être vide (空)(SQL:插入到castingsnomprenomcinedate_naissancelieu_naissancemineurid_representantupdated_atcreated_at) , Hajar, 125mjj, 2018-06-26, CASA, 1, ?, 2021-06-12 19:12:38, 2021-06-12 19:12:38))"
    • 不插入第二个表代表的id
    • 你能告诉我你的代理迁移吗?我也认为你应该插入 $representant->id 而不是 $representant->id_representant
    • 检查问题,我已经把代表迁移了
    【解决方案2】:

    您的问题出在 Carbon 方法中,而不是在模型中,请检查传递给的数据

    $age = Carbon::now()->format('Y')- Carbon::createFromFormat('dd/mm/YYYY', $date)->format('Y');
    

    $date 可能是问题

    【讨论】:

    • 谢谢你的帮助,请问如何检查 $date 的值?
    • 只要 dd($date) 就会返回给浏览器
    • 我得到“06/26/2018”
    • 所以它的 mm/dd/YYYY,而不是 dd/mm/YYYY
    猜你喜欢
    • 2021-08-29
    • 2013-01-09
    • 1970-01-01
    • 2016-03-30
    • 2021-11-22
    • 1970-01-01
    • 2019-04-23
    • 2021-03-18
    • 2019-11-12
    相关资源
    最近更新 更多