@yohang hey.
That's happening because laravel uses magic method __call to determine what to do in case of someone accessing an attribute that doesn't exist. Think about it, did you add a deposit attribute to your model? You didn't. You've only added a deposit() method to your model.
Laravel is smart enough to know that when you are accessing the depposit variable you want to get the relationship. Behind the scenes it converts your call to something like:
$model->deposit()->get();
Anyways, the reason you get false is because there is no such an attribute deposit on the model.
Even after loading the relationship once, accessing the attribute will just fetch is from a cached version stored on the object and if you check there again whether the variable is set or not, you will get false again, as the cached data is stored under a global relationship array ($relations) on the model.
To check if your relationship is loaded you can use the relationLoaded method:
$this->relationLoaded('deposit'h;