我正在尝试理解雄辩的关系,但似乎我在理解它上缺少一些东西。我有:
PurchaseView
产生许多Meeting
。 Documents
生成特定的Document
。因此一对多关系。我试图在Meeting
详细信息表中显示'meeting_name',但出现此错误:
试图获取非对象的属性“会议名称”(视图:C:\ wamp64 \ www \ yajra_contact_system \ resources \ views \ documents \ index.blade.php)
这是我的代码。
请通过代码解决方案进行解释:
app \ Document.php文件:
Document
app \ Meeting.php文件:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Document extends Model
{
protected $fillable = [
'document_name',
'document_desc',
];
public function meeting(){
return $this->belongsTo(Meeting::class);
}
}
app \ Http \ Controllers \ DocumentsController.php文件:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Meeting extends Model
{
protected $fillable = [
'document_id',
'meeting_name',
'meeting_desc',
'room_no',
'no_of_invitees',
'comments'
];
public function documents(){
return $this->hasMany(Document::class);
}
}
资源\视图\文档\ index.blade.php文件:
namespace App\Http\Controllers;
use App\Document;
use App\Meeting;
use Illuminate\Http\Request;
class DocumentsController extends Controller
{
public function index()
{
$documents = Document::all();
$meetings = Meeting::all();
return view('documents.index', compact('documents', 'meetings'));
}
}
答案 0 :(得分:2)
您的代码有很多问题:
首先:要使用该关系...,您必须先加载它...
通过使用with('relationName')方法完成的加载关系...
索引:
$documents = Document::with('meeting')->all();
秒:
<td>{{$document->meetings->meeting_name}}</td> <!-- ERROR IS HERE -->
该关系被命名为不带s ..而不是会议....
第三名:
提供有关外键的有害生物实践
在会议模型中
public function documents(){
return $this->hasMany(Document::class,'meeting_id');
}
在文档模型中:
public function meeting(){
return $this->belongsTo(Meeting::class,'meeting_id');
}
请确保您在文档表中有一个Meeting_id列,作为会议表中ID的外键被引用
有关加载关系的更多详细信息:
https://laravel.com/docs/7.x/eloquent-relationships#eager-loading
答案 1 :(得分:1)
所以您将表弄混了。
每个会议有一个记录,但是在会议表中有一个document_id,您需要为每个文件复制会议记录。
从会议表中删除document_id
在文件表中添加一个Meeting_id
请记住要更新模型的易错数组,否则您将不会在集合中获得新的列。
这将解决您的问题,因为您的关系正确。