如何在急切加载中获取关联表的行:Laravel 5.1

Pan*_*kaj 9 php laravel-5 laravel-5.1

我有三个数据库表.

CREATE TABLE `tblproject` (
  `ProjectID` int(11) NOT NULL,
  `ProjectStatusID` varchar(30) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

CREATE TABLE `tblprojectSkills` (
  `ProjectSkillID` int(11) NOT NULL,
  `ProjectID` int NOT NULL,
  `SkillID` int NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

CREATE TABLE `tblSkills` (
  `SkillID` int(11) NOT NULL,
  `Skill` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
Run Code Online (Sandbox Code Playgroud)

在上表中.SkillID在相关tblSkillstblprojectSkills. ProjectID在相关ProjectprojectSkills

我的项目模型如下.

class Project_Model extends Model
{
    protected $table = "tblproject";
    protected $primaryKey = "ProjectID";
    public $timestamps = false;

    public function ProjectSkills() {
        return $this->hasMany('\App\Models\ProjectSkill_Model', 'ProjectID');
    }        
}

class ProjectSkill_Model extends Model
{
    protected $table = "tblprojectskill";
    protected $primaryKey = "ProjectSkillID";
    public $timestamps = false;
}

class Skill_Model extends Model
{
    protected $table = "tblskill";
    protected $primaryKey = "SkillID";
    public $timestamps = false;
}
Run Code Online (Sandbox Code Playgroud)

laravel 5.1中的数据库查询如下.

\App\Models\Project\Project_Model
::with('ProjectSkills')
->where('ProjectID', '=', $ProjectID)->first();
Run Code Online (Sandbox Code Playgroud)

我可以获得技能ID,但是,我如何从技能表中获得技能名称?

Mil*_*eda 4

因此,您的验证会在每个事件等上启动focusout。因此,我添加了以下几行,以便仅在单击后进行验证button

onfocusout: false,
onkeyup: false,
onclick: false,
Run Code Online (Sandbox Code Playgroud)

其次,在您的内部CreateErrorMessage,我做了一些小的更改,以便立即显示所有错误消息。Message是一个object并且会有多个错误消息,因此它需要经过$.each.

最后,您正在检查ErrorMessages循环内部,理想情况下应该在外部,以便检查只发生一次。

以下是更新后的代码:

onfocusout: false,
onkeyup: false,
onclick: false,
Run Code Online (Sandbox Code Playgroud)
$(function() {
  $("form#loginForm").validate({
    onfocusout: false,
    onkeyup: false,
    onclick: false,
    rules: {
      EmailAddress: "required",
      Password: "required"
    },
    messages: {
      EmailAddress: {
        required: "Please enter email"
      },
      Password: {
        required: "Please enter Password"
      }
    },
    showErrors: function(errorMap, errorList) {
      RemoveErrorElements();
      CreateErrorMessage(errorList);
    }
  });
});

function CreateErrorMessage(errorList) {

  if ($(".panel-body").find("ul.ErrorMessages").length === 0) {
    $(".panel-body").prepend("<ul class='ErrorMessages'><ul>");
  }

  var ErrorMessages = $(".panel-body").find("ul.ErrorMessages");

  $.each(errorList, function(index, Message) {
    $(Message.element).parent().parent().addClass("has-error");
    $(Message).each(function(k, v) {
      ErrorMessages.append("<li>" + v.message + "</li>");
    })

  });
}

function RemoveErrorElements() {
  $(".panel-body").find("ul.ErrorMessages").remove();
}
Run Code Online (Sandbox Code Playgroud)